diff options
author | Kristina Chodorow <kchodorow@google.com> | 2016-07-22 15:18:07 +0000 |
---|---|---|
committer | John Cater <jcater@google.com> | 2016-07-22 20:10:29 +0000 |
commit | 36a6c17629e76872a876cd313623246d4d0aa082 (patch) | |
tree | 0178e6b8487cfd00f7c7864f2c20620da3dbcb9d /src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java | |
parent | 4545ef538664563d284ceb7d19d6dc357497b2d0 (diff) |
Create a symlink with the right workspace name under the execroot
The execution root currently uses the basename of the workspace directory for
the workspace name, not the name in the WORKSPACE file. (For example, if our
sources were in /path/to/foo and our WORKSPACE file had workspace(name = "bar"),
our execution root would look like execroot/foo.)
This creates a symlink bar -> foo, so that accessing ../repo_name actually works
for the main repository.
RELNOTES[INC]: The main repository's execution root is under the main
repository's workspace name, not the source directory's basename. This shouldn't
have any effect on most builds, but it's possible it could break someone doing
weird things with paths in actions.
--
MOS_MIGRATED_REVID=128175455
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java | 23 |
1 files changed, 19 insertions, 4 deletions
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 9608878f34..5215b7370a 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 @@ -20,6 +20,7 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.ResolvedTargets; import com.google.devtools.build.lib.cmdline.TargetParsingException; import com.google.devtools.build.lib.events.Event; +import com.google.devtools.build.lib.packages.NoSuchPackageException; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.packages.TargetUtils; import com.google.devtools.build.lib.pkgcache.CompileOneDependencyTransformer; @@ -37,14 +38,12 @@ import com.google.devtools.build.skyframe.SkyFunction; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; import com.google.devtools.build.skyframe.ValueOrException; - import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; - import javax.annotation.Nullable; /** @@ -56,6 +55,22 @@ final class TargetPatternPhaseFunction implements SkyFunction { @Override public TargetPatternPhaseValue compute(SkyKey key, Environment env) { TargetPatternList options = (TargetPatternList) key.argument(); + PackageValue packageValue = null; + boolean workspaceError = false; + try { + packageValue = (PackageValue) env.getValueOrThrow( + PackageValue.key(Label.EXTERNAL_PACKAGE_IDENTIFIER), NoSuchPackageException.class); + } catch (NoSuchPackageException e) { + env.getListener().handle(Event.error(e.getMessage())); + workspaceError = true; + } + if (env.valuesMissing()) { + return null; + } + String workspaceName = ""; + if (!workspaceError) { + workspaceName = packageValue.getPackage().getWorkspaceName(); + } // Determine targets to build: ResolvedTargets<Target> targets = getTargetsToBuild(env, @@ -163,8 +178,8 @@ final class TargetPatternPhaseFunction implements SkyFunction { Set<Target> testSuiteTargets = Sets.difference(targets.getTargets(), expandedTargets.getTargets()); return new TargetPatternPhaseValue(expandedTargets.getTargets(), testsToRun, preExpansionError, - expandedTargets.hasError(), filteredTargets, testFilteredTargets, - targets.getTargets(), ImmutableSet.copyOf(testSuiteTargets)); + expandedTargets.hasError() || workspaceError, filteredTargets, testFilteredTargets, + targets.getTargets(), ImmutableSet.copyOf(testSuiteTargets), workspaceName); } /** |