aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java22
1 files changed, 16 insertions, 6 deletions
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 4e6628d482..901e4154a9 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
@@ -22,7 +22,6 @@ import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.events.Event;
-import com.google.devtools.build.lib.packages.AggregatingAttributeMapper;
import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.Package;
@@ -208,9 +207,15 @@ public abstract class RepositoryFunction {
}
@VisibleForTesting
- protected static PathFragment getTargetPath(Rule rule, Path workspace) {
- AggregatingAttributeMapper mapper = AggregatingAttributeMapper.of(rule);
- String path = mapper.get("path", Type.STRING);
+ protected static PathFragment getTargetPath(Rule rule, Path workspace)
+ throws RepositoryFunctionException {
+ WorkspaceAttributeMapper mapper = WorkspaceAttributeMapper.of(rule);
+ String path;
+ try {
+ path = mapper.get("path", Type.STRING);
+ } catch (EvalException e) {
+ throw new RepositoryFunctionException(e, Transience.PERSISTENT);
+ }
PathFragment pathFragment = new PathFragment(path);
return workspace.getRelative(pathFragment).asFragment();
}
@@ -397,8 +402,13 @@ public abstract class RepositoryFunction {
// reflected in the SkyFrame tree, since it's not symlinked to it or anything.
if (repositoryRule.getRuleClass().equals(NewLocalRepositoryRule.NAME)
&& repositoryPath.segmentCount() == 1) {
- PathFragment pathDir = RepositoryFunction.getTargetPath(
- repositoryRule, directories.getWorkspace());
+ PathFragment pathDir;
+ try {
+ pathDir = RepositoryFunction.getTargetPath(
+ repositoryRule, directories.getWorkspace());
+ } catch (RepositoryFunctionException e) {
+ throw new IOException(e.getMessage());
+ }
FileSystem fs = directories.getWorkspace().getFileSystem();
SkyKey dirKey = DirectoryListingValue.key(
RootedPath.toRootedPath(fs.getRootDirectory(), fs.getPath(pathDir)));