diff options
author | Kristina Chodorow <kchodorow@google.com> | 2016-09-12 14:35:41 +0000 |
---|---|---|
committer | Dmitry Lomov <dslomov@google.com> | 2016-09-12 17:09:22 +0000 |
commit | 0cfbcf8ac356ee681331c1b04290074f5d220d1f (patch) | |
tree | 182c5410d5b888201215c167cfa2313d10a9a3ca /src/main/java/com/google/devtools/build/lib/bazel/repository/MavenServerFunction.java | |
parent | d85fd98f4103cb9f1f1015a606757d08d2ef2cee (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.java | 48 |
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); } } |