Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bdee8f91 authored by Cole Faust's avatar Cole Faust
Browse files

Don't allow tree artifacts in mixed builds

Tree artifacts aren't fully correct in incremental builds with ninja,
so add a check that we don't write rules using them.

Bug: 293609369
Test: m nothing
Change-Id: I2e49cb6ec24124baf00adb0860f3c1f1f80178bb
parent 7dcfeb81
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -177,6 +177,21 @@ func newAqueryHandler(aqueryResult *analysis_v2_proto.ActionGraphContainer) (*aq
		if err != nil {
			return nil, err
		}
		if artifact.IsTreeArtifact &&
			!strings.HasPrefix(artifactPath, "bazel-out/io_bazel_rules_go/") &&
			!strings.HasPrefix(artifactPath, "bazel-out/rules_java_builtin/") {
			// Since we're using ninja as an executor, we can't use tree artifacts. Ninja only
			// considers a file/directory "dirty" when it's mtime changes. Directories' mtimes will
			// only change when a file in the directory is added/removed, but not when files in
			// the directory are changed, or when files in subdirectories are changed/added/removed.
			// Bazel handles this by walking the directory and generating a hash for it after the
			// action runs, which we would have to do as well if we wanted to support these
			// artifacts in mixed builds.
			//
			// However, there are some bazel built-in rules that use tree artifacts. Allow those,
			// but keep in mind that they'll have incrementality issues.
			return nil, fmt.Errorf("tree artifacts are currently not supported in mixed builds: " + artifactPath)
		}
		artifactIdToPath[artifactId(artifact.Id)] = artifactPath
	}