diff options
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java | 10 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/analysis/constraints/ConstraintsTest.java | 21 |
2 files changed, 26 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java index 6114f1d933..af54d080c5 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java @@ -629,16 +629,16 @@ public class PackageFunction implements SkyFunction { return null; } - Event.replayEventsOn(env.getListener(), pkgBuilder.getEvents()); - for (Postable post : pkgBuilder.getPosts()) { - env.getListener().post(post); - } - if (packageShouldBeConsideredInError) { pkgBuilder.setContainsErrors(); } Package pkg = pkgBuilder.finishBuild(); + Event.replayEventsOn(env.getListener(), pkgBuilder.getEvents()); + for (Postable post : pkgBuilder.getPosts()) { + env.getListener().post(post); + } + // We know this SkyFunction will not be called again, so we can remove the cache entry. packageFunctionCache.invalidate(packageId); diff --git a/src/test/java/com/google/devtools/build/lib/analysis/constraints/ConstraintsTest.java b/src/test/java/com/google/devtools/build/lib/analysis/constraints/ConstraintsTest.java index ee090f9a4e..ee91d7a196 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/constraints/ConstraintsTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/constraints/ConstraintsTest.java @@ -162,6 +162,27 @@ public class ConstraintsTest extends AbstractConstraintsTest { .setDefaults("c").make(); } + @Test + public void packageErrorOnEnvironmentGroupWithMissingEnvironments() throws Exception { + scratch.file("buildenv/envs/BUILD", + "environment(name = 'env1')", + "environment(name = 'env2')", + "environment_group(", + " name = 'envs',", + " environments = [':env1', ':en2'],", + " defaults = [':env1'])"); + reporter.removeHandler(failFastHandler); + assertThat(scratchConfiguredTarget("foo", "g", + "genrule(" + + " name = 'g'," + + " srcs = []," + + " outs = ['g.out']," + + " cmd = ''," + + " restricted_to = ['//buildenv/envs:env1'])")) + .isNull(); + assertContainsEvent("environment //buildenv/envs:en2 does not exist"); + } + /** * By default, a rule *implicitly* supports all defaults, meaning the explicitly known * environment set is empty. |