aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java
diff options
context:
space:
mode:
authorGravatar kchodorow <kchodorow@google.com>2017-03-30 16:45:03 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2017-03-31 17:09:07 +0200
commit1d9e1ac90197b1d3d7b137ba3c1ada67bb9ba31b (patch)
treee1fd678b5e641169c50762929b7641a17b4e147f /src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java
parentea6f209f88e4292f0af5b75ef6872e1902eaeccd (diff)
Symlink output directories to the correct directory name
If the workspace directory is /path/to/my/proj and the name in the WORKSPACE file is "floop", this will symlink the output directories to output_base/execroot/floop instead of output_base/execroot/proj. More prep for #1262, fixes #1681. PiperOrigin-RevId: 151712384
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java29
1 files changed, 21 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java
index 73cc667034..2363624388 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BinTools.java
@@ -37,12 +37,14 @@ import java.io.IOException;
*/
public final class BinTools {
private final BlazeDirectories directories;
- private final Path binDir; // the working bin directory under execRoot
+ private final Path execrootParent;
private final ImmutableList<String> embeddedTools;
+ private Path binDir; // the working bin directory under execRoot
+
private BinTools(BlazeDirectories directories, ImmutableList<String> tools) {
this.directories = directories;
- this.binDir = directories.getExecRoot().getRelative("_bin");
+ this.execrootParent = directories.getExecRoot().getParentDirectory();
ImmutableList.Builder<String> builder = ImmutableList.builder();
// Files under embedded_tools shouldn't be copied to under _bin dir
// They won't be used during action execution time.
@@ -52,6 +54,7 @@ public final class BinTools {
}
}
this.embeddedTools = builder.build();
+ this.binDir = null;
}
/**
@@ -69,7 +72,8 @@ public final class BinTools {
*/
@VisibleForTesting
public static BinTools empty(BlazeDirectories directories) {
- return new BinTools(directories, ImmutableList.<String>of());
+ return new BinTools(directories, ImmutableList.<String>of()).setBinDir(
+ directories.getWorkspace().getBaseName());
}
/**
@@ -79,7 +83,8 @@ public final class BinTools {
*/
@VisibleForTesting
public static BinTools forUnitTesting(BlazeDirectories directories, Iterable<String> tools) {
- return new BinTools(directories, ImmutableList.copyOf(tools));
+ return new BinTools(directories, ImmutableList.copyOf(tools)).setBinDir(
+ directories.getWorkspace().getBaseName());
}
/**
@@ -88,7 +93,7 @@ public final class BinTools {
*/
@VisibleForTesting
public static BinTools forIntegrationTesting(
- BlazeDirectories directories, String srcDir, Iterable<String> tools)
+ BlazeDirectories directories, String srcDir, Iterable<String> tools, String repositoryName)
throws IOException {
Path srcPath = directories.getOutputBase().getFileSystem().getPath(srcDir);
for (String embedded : tools) {
@@ -101,7 +106,7 @@ public final class BinTools {
// much point in creating a symlink to a non-existent binary here.
continue;
}
- Path outputPath = directories.getExecRoot().getChild("_bin").getChild(embedded);
+ Path outputPath = directories.getExecRoot(repositoryName).getChild("_bin").getChild(embedded);
if (outputPath.exists()) {
outputPath.delete();
}
@@ -109,7 +114,7 @@ public final class BinTools {
outputPath.createSymbolicLink(runfilesPath);
}
- return new BinTools(directories, ImmutableList.copyOf(tools));
+ return new BinTools(directories, ImmutableList.copyOf(tools)).setBinDir(repositoryName);
}
private static void scanDirectoryRecursively(
@@ -143,6 +148,7 @@ public final class BinTools {
}
public Artifact getEmbeddedArtifact(String embedPath, ArtifactFactory artifactFactory) {
+ Preconditions.checkNotNull(binDir);
PathFragment path = getExecPath(embedPath);
Preconditions.checkNotNull(path, embedPath + " not found in embedded tools");
return artifactFactory.getDerivedArtifact(path, binDir.getParentDirectory());
@@ -156,11 +162,17 @@ public final class BinTools {
return builder.build();
}
+ private BinTools setBinDir(String workspaceName) {
+ binDir = execrootParent.getRelative(workspaceName).getRelative("_bin");
+ return this;
+ }
+
/**
* Initializes the build tools not available at absolute paths. Note that
* these must be constant across all configurations.
*/
- public void setupBuildTools() throws ExecException {
+ public void setupBuildTools(String workspaceName) throws ExecException {
+ setBinDir(workspaceName);
try {
FileSystemUtils.createDirectoryAndParents(binDir);
} catch (IOException e) {
@@ -173,6 +185,7 @@ public final class BinTools {
}
private void setupTool(String embeddedPath) throws ExecException {
+ Preconditions.checkNotNull(binDir);
Path sourcePath = directories.getEmbeddedBinariesRoot().getRelative(embeddedPath);
Path linkPath = binDir.getRelative(new PathFragment(embeddedPath).getBaseName());
linkTool(sourcePath, linkPath);