diff options
author | Damien Martin-Guillerez <dmarting@google.com> | 2016-01-18 15:25:56 +0000 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@google.com> | 2016-01-18 16:52:03 +0000 |
commit | 9a9c3b93f9eefdfa166f24a893d51d8d4abc8d3a (patch) | |
tree | 2c98cb7594f8253551d33693fc8f80f800e6d10f /src/main/java | |
parent | daffc359d7c6961d9f741980438549bf74e6132c (diff) |
Inlined RepositoryFunction#getExternalPackage
This method was used only twice. Now there is only one entry point for requesting
a rule in the external package (RepositoryFunction#getRule(String, Environment)).
This is a step towards supporting loading skylark rules in the workspace file from
remote repository.
--
MOS_MIGRATED_REVID=112407797
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/bazel/repository/MavenServerFunction.java | 16 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java | 42 |
2 files changed, 36 insertions, 22 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 c0b9414c32..b2280fa447 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 @@ -19,10 +19,10 @@ 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.Package; 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.skyframe.FileValue; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.Fingerprint; @@ -66,15 +66,19 @@ public class MavenServerFunction implements SkyFunction { } @Nullable + @Override public SkyValue compute(SkyKey skyKey, Environment env) throws SkyFunctionException { String repository = (String) skyKey.argument(); - Package externalPackage = RepositoryFunction.getExternalPackage(env); - if (externalPackage == null) { - return null; + Rule repositoryRule; + try { + repositoryRule = RepositoryFunction.getRule(repository, env); + if (repositoryRule == null) { + return null; + } + } catch (RepositoryNotFoundException ex) { + repositoryRule = null; } - Rule repositoryRule = externalPackage.getRule(repository); - String serverName; String url; Map<String, FileValue> settingsFiles; 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 c67c254225..13e47368a6 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 @@ -89,7 +89,7 @@ public abstract class RepositoryFunction { * <p>This exception should be used by child classes to limit the types of exceptions * {@link RepositoryDelegatorFunction} has to know how to catch.</p> */ - public static final class RepositoryFunctionException extends SkyFunctionException { + public static class RepositoryFunctionException extends SkyFunctionException { public RepositoryFunctionException(NoSuchPackageException cause, Transience transience) { super(cause, transience); } @@ -109,6 +109,19 @@ public abstract class RepositoryFunction { } } + /** + * Exception thrown when something a repository rule cannot be found. + */ + public static final class RepositoryNotFoundException extends RepositoryFunctionException { + public RepositoryNotFoundException(String repositoryName) { + super( + new BuildFileContainsErrorsException( + Label.EXTERNAL_PACKAGE_IDENTIFIER, + "The repository named '" + repositoryName + "' could not be resolved"), + Transience.PERSISTENT); + } + } + private BlazeDirectories directories; private byte[] computeRuleKey(Rule rule, byte[] ruleSpecificData) { @@ -352,8 +365,13 @@ public abstract class RepositoryFunction { } } + /** + * Uses a remote repository name to fetch the corresponding Rule describing how to get it. + * + * This should be the unique entry point for resolving a remote repository function. + */ @Nullable - public static Package getExternalPackage(Environment env) + public static Rule getRule(String repository, Environment env) throws RepositoryFunctionException { SkyKey packageKey = PackageValue.key(Label.EXTERNAL_PACKAGE_IDENTIFIER); PackageValue packageValue; @@ -377,7 +395,11 @@ public abstract class RepositoryFunction { Label.EXTERNAL_PACKAGE_IDENTIFIER, "Could not load //external package"), Transience.PERSISTENT); } - return externalPackage; + Rule rule = externalPackage.getRule(repository); + if (rule == null) { + throw new RepositoryNotFoundException(repository); + } + return rule; } @Nullable @@ -402,19 +424,7 @@ public abstract class RepositoryFunction { public static Rule getRule( RepositoryName repositoryName, @Nullable String ruleClassName, Environment env) throws RepositoryFunctionException { - Package externalPackage = getExternalPackage(env); - if (externalPackage == null) { - return null; - } - - Rule rule = externalPackage.getRule(repositoryName.strippedName()); - if (rule == null) { - throw new RepositoryFunctionException( - new BuildFileContainsErrorsException( - Label.EXTERNAL_PACKAGE_IDENTIFIER, - "The repository named '" + repositoryName + "' could not be resolved"), - Transience.PERSISTENT); - } + Rule rule = getRule(repositoryName.strippedName(), env); Preconditions.checkState(ruleClassName == null || rule.getRuleClass().equals(ruleClassName), "Got %s, was expecting a %s", rule, ruleClassName); return rule; |