diff options
author | Janak Ramakrishnan <janakr@google.com> | 2016-01-07 16:21:39 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2016-01-07 20:20:03 +0000 |
commit | 958ef82df21e4778df00891f96531c75ff24c5ac (patch) | |
tree | e94b130c0d9ee7bc1898e1b8cf00a2856524371f /src/main/java/com/google/devtools/build/lib/query2 | |
parent | e4133aab4db7cd640501d1113c259e8477006b6f (diff) |
In SkyQueryEnvironment, don't silently give up when there's a cycle in the graph. We can compute the universe target patterns outside of skyframe, which is the only reason we need the value we were requesting. Giving up was preventing us from evaluating "..." patterns even if the "..." pattern didn't contain any cycles itself.
--
MOS_MIGRATED_REVID=111605976
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/query2')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java index 78aab4a486..614f502087 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java @@ -55,7 +55,7 @@ import com.google.devtools.build.lib.skyframe.FileValue; import com.google.devtools.build.lib.skyframe.GraphBackedRecursivePackageProvider; import com.google.devtools.build.lib.skyframe.PackageLookupValue; import com.google.devtools.build.lib.skyframe.PackageValue; -import com.google.devtools.build.lib.skyframe.PrepareDepsOfPatternsValue; +import com.google.devtools.build.lib.skyframe.PrepareDepsOfPatternsFunction; import com.google.devtools.build.lib.skyframe.RecursivePackageProviderBackedTargetPatternResolver; import com.google.devtools.build.lib.skyframe.SkyFunctions; import com.google.devtools.build.lib.skyframe.TargetPatternValue; @@ -147,21 +147,23 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target> { LOG.info("Spent " + (duration / 1000 / 1000) + " ms on evaluation and walkable graph"); } + SkyKey universeKey = graphFactory.getUniverseKey(universeScope, parserPrefix); + universeTargetPatternKeys = + PrepareDepsOfPatternsFunction.getTargetPatternKeys( + PrepareDepsOfPatternsFunction.getSkyKeys(universeKey, eventHandler)); + // The prepareAndGet call above evaluates a single PrepareDepsOfPatterns SkyKey. // We expect to see either a single successfully evaluated value or a cycle in the result. Collection<SkyValue> values = result.values(); if (!values.isEmpty()) { Preconditions.checkState(values.size() == 1, "Universe query \"%s\" returned multiple" + " values unexpectedly (%s values in result)", universeScope, values.size()); - PrepareDepsOfPatternsValue prepareDepsOfPatternsValue = - (PrepareDepsOfPatternsValue) Iterables.getOnlyElement(values); - universeTargetPatternKeys = prepareDepsOfPatternsValue.getTargetPatternKeys(); + Preconditions.checkNotNull(result.get(universeKey), result); } else { // No values in the result, so there must be an error. We expect the error to be a cycle. boolean foundCycle = !Iterables.isEmpty(result.getError().getCycleInfo()); Preconditions.checkState(foundCycle, "Universe query \"%s\" failed with non-cycle error: %s", universeScope, result.getError()); - universeTargetPatternKeys = ImmutableList.of(); } } |