aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Lukacs Berki <lberki@google.com>2015-11-25 09:23:14 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2015-11-25 10:00:30 +0000
commitd6023e5fb78f7fe6aae3073c77f1fee6ad0a3837 (patch)
treecaf689fc0ed7cd482caea7116c5486946d2b795b /src/main/java/com/google/devtools/build/lib
parentd91aa2e54a1f176dade3baf6d27b496ef2e8cf90 (diff)
Simplify external repository support by removing FileValue from RepositoryValue and not depending it from repository functions.
-- MOS_MIGRATED_REVID=108685867
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/GitRepositoryFunction.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/HttpArchiveFunction.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/MavenJarFunction.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/NewGitRepositoryFunction.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/NewHttpArchiveFunction.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/repository/NewLocalRepositoryFunction.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/RepositoryValue.java47
12 files changed, 47 insertions, 123 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/GitRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/GitRepositoryFunction.java
index 433e355595..bdcb1dd2a6 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/GitRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/GitRepositoryFunction.java
@@ -19,7 +19,6 @@ import com.google.devtools.build.lib.bazel.rules.workspace.GitRepositoryRule;
import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction;
-import com.google.devtools.build.lib.skyframe.FileValue;
import com.google.devtools.build.lib.skyframe.RepositoryValue;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
@@ -44,10 +43,7 @@ public class GitRepositoryFunction extends RepositoryFunction {
}
Path outputDirectory = getExternalRepositoryDirectory().getRelative(rule.getName());
- FileValue directoryValue = createDirectory(outputDirectory, env, rule);
- if (directoryValue == null) {
- return null;
- }
+ createDirectory(outputDirectory, rule);
try {
HttpDownloadValue value = (HttpDownloadValue) env.getValueOrThrow(
@@ -59,10 +55,10 @@ public class GitRepositoryFunction extends RepositoryFunction {
throw new RepositoryFunctionException(e, Transience.TRANSIENT);
}
- return RepositoryValue.create(directoryValue);
+ return RepositoryValue.create(outputDirectory);
}
- protected FileValue createDirectory(Path path, Environment env, Rule rule)
+ protected void createDirectory(Path path, Rule rule)
throws RepositoryFunctionException {
try {
FileSystemUtils.createDirectoryAndParents(path);
@@ -70,7 +66,6 @@ public class GitRepositoryFunction extends RepositoryFunction {
throw new RepositoryFunctionException(new IOException("Could not create directory for "
+ rule.getName() + ": " + e.getMessage()), Transience.TRANSIENT);
}
- return getRepositoryDirectory(path, env);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/HttpArchiveFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/HttpArchiveFunction.java
index 406673bc58..671ee6d955 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/HttpArchiveFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/HttpArchiveFunction.java
@@ -19,7 +19,6 @@ import com.google.devtools.build.lib.bazel.rules.workspace.HttpArchiveRule;
import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction;
-import com.google.devtools.build.lib.skyframe.FileValue;
import com.google.devtools.build.lib.skyframe.RepositoryValue;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
@@ -47,14 +46,13 @@ public class HttpArchiveFunction extends RepositoryFunction {
return compute(env, rule);
}
- protected FileValue createDirectory(Path path, Environment env)
+ protected void createDirectory(Path path)
throws RepositoryFunctionException {
try {
FileSystemUtils.createDirectoryAndParents(path);
} catch (IOException e) {
throw new RepositoryFunctionException(e, Transience.TRANSIENT);
}
- return getRepositoryDirectory(path, env);
}
protected SkyValue compute(Environment env, Rule rule)
@@ -67,11 +65,7 @@ public class HttpArchiveFunction extends RepositoryFunction {
//
// This would download png.tar.gz to .external-repository/png/png.tar.gz.
Path outputDirectory = getExternalRepositoryDirectory().getRelative(rule.getName());
- FileValue directoryValue = createDirectory(outputDirectory, env);
- if (directoryValue == null) {
- return null;
- }
-
+ createDirectory(outputDirectory);
try {
HttpDownloadValue downloadValue = (HttpDownloadValue) env.getValueOrThrow(
HttpDownloadFunction.key(rule, outputDirectory), IOException.class);
@@ -88,7 +82,7 @@ public class HttpArchiveFunction extends RepositoryFunction {
// Assumes all IO errors transient.
throw new RepositoryFunctionException(e, Transience.TRANSIENT);
}
- return RepositoryValue.create(directoryValue);
+ return RepositoryValue.create(outputDirectory);
}
protected SkyKey decompressorValueKey(Rule rule, Path downloadPath, Path outputDirectory)
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenJarFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenJarFunction.java
index e6d997aef6..b3f1805c27 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenJarFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenJarFunction.java
@@ -29,7 +29,6 @@ import com.google.devtools.build.lib.packages.AggregatingAttributeMapper;
import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction;
-import com.google.devtools.build.lib.skyframe.FileValue;
import com.google.devtools.build.lib.skyframe.RepositoryValue;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.Type;
@@ -110,12 +109,10 @@ public class MavenJarFunction extends HttpArchiveFunction {
SkyValue createOutputTree(MavenDownloader downloader, Environment env)
throws RepositoryFunctionException {
- FileValue outputDirectoryValue = createDirectory(downloader.getOutputDirectory(), env);
- if (outputDirectoryValue == null) {
- return null;
- }
-
+ Path outputDirectory = downloader.getOutputDirectory();
+ createDirectory(outputDirectory);
Path repositoryJar;
+
try {
repositoryJar = downloader.download();
} catch (IOException e) {
@@ -130,7 +127,7 @@ public class MavenJarFunction extends HttpArchiveFunction {
.setTargetKind(MavenJarRule.NAME)
.setTargetName(downloader.getName())
.setArchivePath(repositoryJar)
- .setRepositoryPath(outputDirectoryValue.realRootedPath().asPath()).build()),
+ .setRepositoryPath(outputDirectory).build()),
IOException.class);
if (value == null) {
return null;
@@ -138,11 +135,7 @@ public class MavenJarFunction extends HttpArchiveFunction {
} catch (IOException e) {
throw new RepositoryFunctionException(e, Transience.TRANSIENT);
}
- FileValue repositoryFileValue = getRepositoryDirectory(value.getDirectory(), env);
- if (repositoryFileValue == null) {
- return null;
- }
- return RepositoryValue.create(repositoryFileValue);
+ return RepositoryValue.create(value.getDirectory());
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/NewGitRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/NewGitRepositoryFunction.java
index 5431342406..ba659f1ffd 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/NewGitRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/NewGitRepositoryFunction.java
@@ -18,7 +18,6 @@ import com.google.devtools.build.lib.bazel.rules.workspace.NewGitRepositoryRule;
import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction;
-import com.google.devtools.build.lib.skyframe.FileValue;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.skyframe.SkyFunctionException;
import com.google.devtools.build.skyframe.SkyFunctionException.Transience;
@@ -46,11 +45,7 @@ public class NewGitRepositoryFunction extends GitRepositoryFunction {
}
Path outputDirectory = getExternalRepositoryDirectory().getRelative(rule.getName());
- FileValue directoryValue = createDirectory(outputDirectory, env, rule);
- if (directoryValue == null) {
- return null;
- }
-
+ createDirectory(outputDirectory, rule);
try {
HttpDownloadValue value = (HttpDownloadValue) env.getValueOrThrow(
GitCloneFunction.key(rule, outputDirectory), IOException.class);
@@ -62,6 +57,6 @@ public class NewGitRepositoryFunction extends GitRepositoryFunction {
}
createWorkspaceFile(outputDirectory, rule);
- return symlinkBuildFile(rule, getWorkspace(), directoryValue, env);
+ return symlinkBuildFile(rule, getWorkspace(), outputDirectory, env);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/NewHttpArchiveFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/NewHttpArchiveFunction.java
index 1ee640c989..f5fb603109 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/NewHttpArchiveFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/NewHttpArchiveFunction.java
@@ -18,7 +18,6 @@ import com.google.devtools.build.lib.bazel.rules.workspace.NewHttpArchiveRule;
import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
import com.google.devtools.build.lib.packages.AggregatingAttributeMapper;
import com.google.devtools.build.lib.packages.Rule;
-import com.google.devtools.build.lib.skyframe.FileValue;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
@@ -59,10 +58,6 @@ public class NewHttpArchiveFunction extends HttpArchiveFunction {
throw new RepositoryFunctionException(new IOException("Could not create directory for "
+ rule.getName() + ": " + e.getMessage()), Transience.TRANSIENT);
}
- FileValue repositoryDirectory = getRepositoryDirectory(outputDirectory, env);
- if (repositoryDirectory == null) {
- return null;
- }
// Download.
HttpDownloadValue downloadedFileValue;
@@ -103,6 +98,6 @@ public class NewHttpArchiveFunction extends HttpArchiveFunction {
// Add WORKSPACE and BUILD files.
createWorkspaceFile(decompressed.getDirectory(), rule);
- return symlinkBuildFile(rule, getWorkspace(), repositoryDirectory, env);
+ return symlinkBuildFile(rule, getWorkspace(), outputDirectory, env);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java
index be1cbaf8fd..7bb53e5d5b 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java
@@ -77,13 +77,9 @@ public class AndroidNdkRepositoryFunction extends RepositoryFunction {
return null;
}
- FileValue directoryValue = prepareLocalRepositorySymlinkTree(rule, env);
- if (directoryValue == null) {
- return null;
- }
-
+ Path outputDirectory = prepareLocalRepositorySymlinkTree(rule, env);
PathFragment pathFragment = getTargetPath(rule);
- Path ndkSymlinkTreeDirectory = directoryValue.realRootedPath().asPath().getRelative("ndk");
+ Path ndkSymlinkTreeDirectory = outputDirectory.getRelative("ndk");
try {
ndkSymlinkTreeDirectory.createDirectory();
} catch (IOException e) {
@@ -100,7 +96,7 @@ public class AndroidNdkRepositoryFunction extends RepositoryFunction {
String apiLevelAttr = attributes.get("api_level", Type.INTEGER).toString();
ApiLevel apiLevel = new ApiLevel(env.getListener(), ruleName, apiLevelAttr);
- NdkRelease ndkRelease = getNdkRelease(directoryValue, env);
+ NdkRelease ndkRelease = getNdkRelease(outputDirectory, env);
ImmutableList.Builder<CrosstoolStlPair> crosstoolsAndStls = ImmutableList.builder();
try {
@@ -127,7 +123,7 @@ public class AndroidNdkRepositoryFunction extends RepositoryFunction {
}
String buildFile = createBuildFile(ruleName, crosstoolsAndStls.build());
- return writeBuildFile(directoryValue, buildFile);
+ return writeBuildFile(getOutputBase(), buildFile);
}
@Override
@@ -237,10 +233,10 @@ public class AndroidNdkRepositoryFunction extends RepositoryFunction {
.replace("%toolchainFileGlobs%", toolchainFileGlobs.toString().trim());
}
- private static NdkRelease getNdkRelease(FileValue directoryValue, Environment env)
+ private static NdkRelease getNdkRelease(Path directory, Environment env)
throws RepositoryFunctionException {
- Path releaseFilePath = directoryValue.realRootedPath().asPath().getRelative("ndk/RELEASE.TXT");
+ Path releaseFilePath = directory.getRelative("ndk/RELEASE.TXT");
SkyKey releaseFileKey = FileValue.key(RootedPath.toRootedPath(
releaseFilePath, PathFragment.EMPTY_FRAGMENT));
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
index 1556ffe962..00e53cbfef 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
@@ -19,9 +19,9 @@ import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction;
-import com.google.devtools.build.lib.skyframe.FileValue;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.ResourceFileLoader;
+import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunctionException;
import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -42,15 +42,11 @@ public class AndroidSdkRepositoryFunction extends RepositoryFunction {
return null;
}
- FileValue directoryValue = prepareLocalRepositorySymlinkTree(rule, env);
- if (directoryValue == null) {
- return null;
- }
-
+ Path outputDirectory = prepareLocalRepositorySymlinkTree(rule, env);
PathFragment pathFragment = getTargetPath(rule);
if (!symlinkLocalRepositoryContents(
- directoryValue.realRootedPath().asPath(),
+ outputDirectory,
getOutputBase().getFileSystem().getPath(pathFragment),
env)) {
return null;
@@ -72,7 +68,7 @@ public class AndroidSdkRepositoryFunction extends RepositoryFunction {
.replaceAll("%build_tools_version%", buildToolsVersion)
.replaceAll("%api_level%", apiLevel.toString());
- return writeBuildFile(directoryValue, buildFile);
+ return writeBuildFile(outputDirectory, buildFile);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java
index 4d259a41d8..40a0ee7cb7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java
@@ -81,7 +81,7 @@ public class LocalRepositoryFunction extends RepositoryFunction {
new IOException(rule + " must specify an existing directory"), Transience.TRANSIENT);
}
- return RepositoryValue.create(repositoryPath, repositoryValue);
+ return RepositoryValue.create(repositoryPath);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/NewLocalRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/NewLocalRepositoryFunction.java
index 356173e660..cfa0532fdf 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/NewLocalRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/NewLocalRepositoryFunction.java
@@ -17,7 +17,7 @@ package com.google.devtools.build.lib.rules.repository;
import com.google.devtools.build.lib.analysis.RuleDefinition;
import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
import com.google.devtools.build.lib.packages.Rule;
-import com.google.devtools.build.lib.skyframe.FileValue;
+import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunctionException;
import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -37,23 +37,19 @@ public class NewLocalRepositoryFunction extends RepositoryFunction {
return null;
}
- FileValue directoryValue = prepareLocalRepositorySymlinkTree(rule, env);
- if (directoryValue == null) {
- return null;
- }
-
+ Path outputDirectory = prepareLocalRepositorySymlinkTree(rule, env);
PathFragment pathFragment = getTargetPath(rule);
// Link x/y/z to /some/path/to/y/z.
if (!symlinkLocalRepositoryContents(
- directoryValue.realRootedPath().asPath(),
+ outputDirectory,
getOutputBase().getFileSystem().getPath(pathFragment),
env)) {
return null;
}
// Link x/BUILD to <build_root>/x.BUILD.
- return symlinkBuildFile(rule, getWorkspace(), directoryValue, env);
+ return symlinkBuildFile(rule, getWorkspace(), outputDirectory, env);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
index beb7381349..e29769ec24 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
@@ -82,7 +82,7 @@ public class RepositoryDelegatorFunction implements SkyFunction {
+ " not found"),
Transience.TRANSIENT);
}
- return RepositoryValue.create(repoRoot);
+ return RepositoryValue.create(repoPath);
}
RepositoryFunction handler = handlers.get(rule.getRuleClass());
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
index 93d3cf6c7e..2bba0bfcd5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
@@ -79,7 +79,7 @@ public abstract class RepositoryFunction implements SkyFunction {
private BlazeDirectories directories;
- protected FileValue prepareLocalRepositorySymlinkTree(Rule rule, Environment env)
+ protected Path prepareLocalRepositorySymlinkTree(Rule rule, Environment env)
throws RepositoryFunctionException {
Path repositoryDirectory = getExternalRepositoryDirectory().getRelative(rule.getName());
try {
@@ -88,15 +88,10 @@ public abstract class RepositoryFunction implements SkyFunction {
} catch (IOException e) {
throw new RepositoryFunctionException(e, Transience.TRANSIENT);
}
- FileValue directoryValue = getRepositoryDirectory(repositoryDirectory, env);
-
- if (directoryValue == null) {
- return null;
- }
// Add x/WORKSPACE.
createWorkspaceFile(repositoryDirectory, rule);
- return directoryValue;
+ return repositoryDirectory;
}
protected void createWorkspaceFile(Path repositoryDirectory, Rule rule)
@@ -110,30 +105,30 @@ public abstract class RepositoryFunction implements SkyFunction {
}
}
- protected RepositoryValue writeBuildFile(FileValue directoryValue, String contents)
+ protected RepositoryValue writeBuildFile(Path repositoryDirectory, String contents)
throws RepositoryFunctionException {
- Path buildFilePath = directoryValue.realRootedPath().asPath().getRelative("BUILD");
+ Path buildFilePath = repositoryDirectory.getRelative("BUILD");
try {
FileSystemUtils.writeContentAsLatin1(buildFilePath, contents);
} catch (IOException e) {
throw new RepositoryFunctionException(e, Transience.TRANSIENT);
}
- return RepositoryValue.create(directoryValue);
+ return RepositoryValue.create(repositoryDirectory);
}
/**
* Symlinks a BUILD file from the local filesystem into the external repository's root.
* @param rule the rule that declares the build_file path.
* @param workspaceDirectory the workspace root for the build.
- * @param directoryValue the FileValue corresponding to the external repository's root directory.
+ * @param outputDirectory the directory of the remote repository
* @param env the Skyframe environment.
* @return the file value of the symlink created.
* @throws RepositoryFunctionException if the BUILD file specified does not exist or cannot be
* linked.
*/
protected RepositoryValue symlinkBuildFile(
- Rule rule, Path workspaceDirectory, FileValue directoryValue, Environment env)
+ Rule rule, Path workspaceDirectory, Path outputDirectory, Environment env)
throws RepositoryFunctionException {
AggregatingAttributeMapper mapper = AggregatingAttributeMapper.of(rule);
PathFragment buildFile = new PathFragment(mapper.get("build_file", Type.STRING));
@@ -167,11 +162,11 @@ public abstract class RepositoryFunction implements SkyFunction {
Transience.TRANSIENT);
}
- Path buildFilePath = directoryValue.realRootedPath().asPath().getRelative("BUILD");
+ Path buildFilePath = outputDirectory.getRelative("BUILD");
if (createSymbolicLink(buildFilePath, buildFileTarget, env) == null) {
return null;
}
- return RepositoryValue.createNew(directoryValue, buildFileValue);
+ return RepositoryValue.createNew(outputDirectory, buildFileValue);
}
protected static PathFragment getTargetPath(Rule rule) throws RepositoryFunctionException {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryValue.java
index ed3fe4c038..0b29f0ac93 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryValue.java
@@ -28,14 +28,6 @@ public class RepositoryValue implements SkyValue {
private final Path path;
/**
- * This is the FileValue for the [output_base]/external/repo-name directory.
- *
- * <p>If path is a symlink, this will keep track of what the symlink actually points to (for
- * checking equality).</p>
- */
- private final FileValue details;
-
- /**
* If this repository is using a user-created BUILD file (any of the new_* functions) then that
* FileValue needs to be propagated up to the PackageLookup so it doesn't get pruned. The BUILD
* file symlink will be under external/, thus assumed to be immutable, thus Skyframe will prune
@@ -43,41 +35,23 @@ public class RepositoryValue implements SkyValue {
*/
private final Optional<FileValue> overlaidBuildFile;
- private RepositoryValue(
- Path path, FileValue repositoryDirectory, Optional<FileValue> overlaidBuildFile) {
+ private RepositoryValue(Path path, Optional<FileValue> overlaidBuildFile) {
this.path = path;
- this.details = repositoryDirectory;
this.overlaidBuildFile = overlaidBuildFile;
}
/**
* Creates an immutable external repository.
*/
- public static RepositoryValue create(FileValue repositoryDirectory) {
- return new RepositoryValue(
- repositoryDirectory.realRootedPath().asPath(), repositoryDirectory,
- Optional.<FileValue>absent());
- }
-
- /**
- * Creates an immutable external repository that's a symlink to elsewhere on the system.
- *
- * <p>For local repositories, the repository path is something like [output root]/external/repo
- * and the repository value resolves that to the actual symlink it points to. We don't want to
- * lose the repository path, so this constructor is used.</p>
- */
- public static RepositoryValue create(Path repositoryDirectory, FileValue details) {
- return new RepositoryValue(repositoryDirectory, details, Optional.<FileValue>absent());
+ public static RepositoryValue create(Path repositoryDirectory) {
+ return new RepositoryValue(repositoryDirectory, Optional.<FileValue>absent());
}
/**
* Creates an immutable external repository with a mutable BUILD file.
*/
- public static RepositoryValue createNew(
- FileValue repositoryDirectory, FileValue overlaidBuildFile) {
- return new RepositoryValue(
- repositoryDirectory.realRootedPath().asPath(), repositoryDirectory,
- Optional.of(overlaidBuildFile));
+ public static RepositoryValue createNew(Path repositoryDirectory, FileValue overlaidBuildFile) {
+ return new RepositoryValue(repositoryDirectory, Optional.of(overlaidBuildFile));
}
/**
@@ -90,10 +64,6 @@ public class RepositoryValue implements SkyValue {
return path;
}
- public FileValue getRepositoryDirectory() {
- return details;
- }
-
public Optional<FileValue> getOverlaidBuildFile() {
return overlaidBuildFile;
}
@@ -106,20 +76,19 @@ public class RepositoryValue implements SkyValue {
if (other instanceof RepositoryValue) {
RepositoryValue otherValue = (RepositoryValue) other;
- return details.equals(otherValue.details)
- && overlaidBuildFile.equals(otherValue.overlaidBuildFile);
+ return overlaidBuildFile.equals(otherValue.overlaidBuildFile);
}
return false;
}
@Override
public int hashCode() {
- return Objects.hashCode(details, overlaidBuildFile);
+ return Objects.hashCode(overlaidBuildFile);
}
@Override
public String toString() {
- return details + (overlaidBuildFile.isPresent()
+ return path.getPathString() + (overlaidBuildFile.isPresent()
? " (BUILD file: " + overlaidBuildFile.get() + ")" : "");
}