aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java10
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/constraints/ConstraintsTest.java21
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.