aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenServerFunction.java
diff options
context:
space:
mode:
authorGravatar Kristina Chodorow <kchodorow@google.com>2016-09-12 14:35:41 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2016-09-12 17:09:22 +0000
commit0cfbcf8ac356ee681331c1b04290074f5d220d1f (patch)
tree182c5410d5b888201215c167cfa2313d10a9a3ca /src/main/java/com/google/devtools/build/lib/bazel/repository/MavenServerFunction.java
parentd85fd98f4103cb9f1f1015a606757d08d2ef2cee (diff)
Don't print stack traces when repository rules have the wrong type
This also entirely disallows select() in repository rules. All repository rules should now error out if the wrong type is given, instead of printing a stack trace. Fixes #1307. -- MOS_MIGRATED_REVID=132872804
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/bazel/repository/MavenServerFunction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/MavenServerFunction.java48
1 files changed, 27 insertions, 21 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenServerFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenServerFunction.java
index ea85f50c80..2111aedc82 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenServerFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenServerFunction.java
@@ -18,13 +18,14 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.BlazeDirectories;
import com.google.devtools.build.lib.bazel.rules.workspace.MavenServerRule;
-import com.google.devtools.build.lib.packages.AggregatingAttributeMapper;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction.RepositoryFunctionException;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction.RepositoryNotFoundException;
+import com.google.devtools.build.lib.rules.repository.WorkspaceAttributeMapper;
import com.google.devtools.build.lib.skyframe.FileValue;
import com.google.devtools.build.lib.skyframe.PrecomputedValue;
+import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.vfs.Path;
@@ -90,28 +91,33 @@ public class MavenServerFunction implements SkyFunction {
Transience.TRANSIENT);
}
} else {
- AggregatingAttributeMapper mapper = AggregatingAttributeMapper.of(repositoryRule);
+ WorkspaceAttributeMapper mapper = WorkspaceAttributeMapper.of(repositoryRule);
serverName = repositoryRule.getName();
- url = mapper.get("url", Type.STRING);
- if (!mapper.has("settings_file", Type.STRING)
- || mapper.get("settings_file", Type.STRING).isEmpty()) {
- settingsFiles = getDefaultSettingsFile(directories, env);
- } else {
- PathFragment settingsFilePath = new PathFragment(mapper.get("settings_file", Type.STRING));
- RootedPath settingsPath = RootedPath.toRootedPath(
- directories.getWorkspace().getRelative(settingsFilePath), PathFragment.EMPTY_FRAGMENT);
- FileValue fileValue = (FileValue) env.getValue(FileValue.key(settingsPath));
- if (fileValue == null) {
- return null;
- }
-
- if (!fileValue.exists()) {
- throw new RepositoryFunctionException(
- new IOException("Could not find settings file " + settingsPath),
- Transience.TRANSIENT);
+ try {
+ url = mapper.get("url", Type.STRING);
+ if (!mapper.isAttributeValueExplicitlySpecified("settings_file")) {
+ settingsFiles = getDefaultSettingsFile(directories, env);
+ } else {
+ PathFragment settingsFilePath = new PathFragment(
+ mapper.get("settings_file", Type.STRING));
+ RootedPath settingsPath = RootedPath.toRootedPath(
+ directories.getWorkspace().getRelative(settingsFilePath),
+ PathFragment.EMPTY_FRAGMENT);
+ FileValue fileValue = (FileValue) env.getValue(FileValue.key(settingsPath));
+ if (fileValue == null) {
+ return null;
+ }
+
+ if (!fileValue.exists()) {
+ throw new RepositoryFunctionException(
+ new IOException("Could not find settings file " + settingsPath),
+ Transience.TRANSIENT);
+ }
+ settingsFiles = ImmutableMap.<String, FileValue>builder().put(
+ USER_KEY, fileValue).build();
}
- settingsFiles = ImmutableMap.<String, FileValue>builder().put(
- USER_KEY, fileValue).build();
+ } catch (EvalException e) {
+ throw new RepositoryFunctionException(e, Transience.PERSISTENT);
}
}