From a33da62ad294f8c9483aa5685efae0bf3dfadb41 Mon Sep 17 00:00:00 2001 From: Ulf Adams Date: Wed, 4 Nov 2015 21:19:43 +0000 Subject: Implement the offset for the new skyframe-based LoadingPhaseRunner. -- MOS_MIGRATED_REVID=107071400 --- .../devtools/build/lib/skyframe/SkyframeExecutor.java | 8 +++----- .../build/lib/skyframe/TargetPatternPhaseFunction.java | 13 +++++++------ .../build/lib/skyframe/TargetPatternPhaseValue.java | 18 ++++++++++++------ 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java index 6980e69b2f..afba144e13 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java @@ -72,7 +72,6 @@ import com.google.devtools.build.lib.analysis.config.InvalidConfigurationExcepti import com.google.devtools.build.lib.analysis.config.PatchTransition; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.PackageIdentifier; -import com.google.devtools.build.lib.cmdline.ResolvedTargets; import com.google.devtools.build.lib.cmdline.TargetParsingException; import com.google.devtools.build.lib.concurrent.ThreadSafety; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadCompatible; @@ -1718,9 +1717,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { @Override public void updatePatternEvaluator(PathFragment relativeWorkingDirectory) { - if (!relativeWorkingDirectory.equals(PathFragment.EMPTY_FRAGMENT)) { - throw new UnsupportedOperationException(); - } + targetPatternEvaluator.updateOffset(relativeWorkingDirectory); } @Override @@ -1731,7 +1728,8 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { throws TargetParsingException, LoadingFailedException, InterruptedException { Stopwatch timer = Stopwatch.createStarted(); SkyKey key = TargetPatternPhaseValue.key(ImmutableList.copyOf(targetPatterns), - options.compileOneDependency, options.buildTestsOnly, determineTests, + targetPatternEvaluator.getOffset(), options.compileOneDependency, + options.buildTestsOnly, determineTests, TestFilter.forOptions(options, eventHandler, ruleClassNames)); EvaluationResult evalResult = buildDriver.evaluate( diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java index 0c62164f5b..d9485285aa 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java @@ -56,7 +56,7 @@ final class TargetPatternPhaseFunction implements SkyFunction { // Determine targets to build: ResolvedTargets targets = getTargetsToBuild(env, - options.getTargetPatterns(), options.getCompileOneDependency()); + options.getTargetPatterns(), options.getOffset(), options.getCompileOneDependency()); // If the --build_tests_only option was specified or we want to run tests, we need to determine // the list of targets to test. For that, we remove manual tests and apply the command-line @@ -64,7 +64,8 @@ final class TargetPatternPhaseFunction implements SkyFunction { // set as build list as well. ResolvedTargets testTargets = null; if (options.getDetermineTests() || options.getBuildTestsOnly()) { - testTargets = determineTests(env, options.getTargetPatterns(), options.getTestFilter()); + testTargets = determineTests(env, + options.getTargetPatterns(), options.getOffset(), options.getTestFilter()); Preconditions.checkState(env.valuesMissing() || (testTargets != null)); } @@ -168,10 +169,10 @@ final class TargetPatternPhaseFunction implements SkyFunction { * {@link LoadingOptions#compileOneDependency} */ private static ResolvedTargets getTargetsToBuild(Environment env, - List targetPatterns, boolean compileOneDependency) { + List targetPatterns, String offset, boolean compileOneDependency) { List patternSkyKeys = new ArrayList<>(); for (TargetPatternSkyKeyOrException keyOrException : - TargetPatternValue.keys(targetPatterns, FilteringPolicies.FILTER_MANUAL, "")) { + TargetPatternValue.keys(targetPatterns, FilteringPolicies.FILTER_MANUAL, offset)) { try { patternSkyKeys.add(keyOrException.getSkyKey()); } catch (TargetParsingException e) { @@ -223,10 +224,10 @@ final class TargetPatternPhaseFunction implements SkyFunction { * @param testFilter the test filter */ private static ResolvedTargets determineTests(Environment env, - List targetPatterns, TestFilter testFilter) { + List targetPatterns, String offset, TestFilter testFilter) { List patternSkyKeys = new ArrayList<>(); for (TargetPatternSkyKeyOrException keyOrException : - TargetPatternValue.keys(targetPatterns, FilteringPolicies.FILTER_TESTS, "")) { + TargetPatternValue.keys(targetPatterns, FilteringPolicies.FILTER_TESTS, offset)) { try { patternSkyKeys.add(keyOrException.getSkyKey()); } catch (TargetParsingException e) { diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java index 0aa55f493d..2c0fd26478 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java @@ -110,11 +110,11 @@ public final class TargetPatternPhaseValue implements SkyValue { /** Create a target pattern phase value key. */ @ThreadSafe - public static SkyKey key(ImmutableList targetPatterns, boolean compileOneDependency, - boolean buildTestsOnly, boolean determineTests, TestFilter testFilter) { - return new SkyKey(SkyFunctions.TARGET_PATTERN_PHASE, - new TargetPatternList( - targetPatterns, compileOneDependency, buildTestsOnly, determineTests, testFilter)); + public static SkyKey key(ImmutableList targetPatterns, String offset, + boolean compileOneDependency, boolean buildTestsOnly, boolean determineTests, + TestFilter testFilter) { + return new SkyKey(SkyFunctions.TARGET_PATTERN_PHASE, new TargetPatternList( + targetPatterns, offset, compileOneDependency, buildTestsOnly, determineTests, testFilter)); } /** @@ -124,15 +124,17 @@ public final class TargetPatternPhaseValue implements SkyValue { @ThreadSafe static final class TargetPatternList implements Serializable { private final ImmutableList targetPatterns; + private final String offset; private final boolean compileOneDependency; private final boolean buildTestsOnly; private final boolean determineTests; private final TestFilter testFilter; - public TargetPatternList(ImmutableList targetPatterns, + public TargetPatternList(ImmutableList targetPatterns, String offset, boolean compileOneDependency, boolean buildTestsOnly, boolean determineTests, TestFilter testFilter) { this.targetPatterns = targetPatterns; + this.offset = offset; this.compileOneDependency = compileOneDependency; this.buildTestsOnly = buildTestsOnly; this.determineTests = determineTests; @@ -143,6 +145,10 @@ public final class TargetPatternPhaseValue implements SkyValue { return targetPatterns; } + public String getOffset() { + return offset; + } + public boolean getCompileOneDependency() { return compileOneDependency; } -- cgit v1.2.3