diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build')
10 files changed, 37 insertions, 40 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java index c1ff11f122..c10c410a7e 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java @@ -125,7 +125,6 @@ import com.google.devtools.build.lib.rules.repository.LocalRepositoryRule; import com.google.devtools.build.lib.rules.repository.NewLocalRepositoryRule; import com.google.devtools.build.lib.rules.repository.WorkspaceBaseRule; import com.google.devtools.build.lib.util.ResourceFileLoader; -import com.google.devtools.build.lib.vfs.PathFragment; import java.io.IOException; @@ -133,8 +132,6 @@ import java.io.IOException; * A rule class provider implementing the rules Bazel knows. */ public class BazelRuleClassProvider { - private static final PathFragment EXTERNAL = new PathFragment("external"); - /** * Used by the build encyclopedia generator. */ @@ -163,7 +160,7 @@ public class BazelRuleClassProvider { private void validateDirectPrerequisiteVisibility( RuleContext.Builder context, ConfiguredTarget prerequisite, String attrName) { Rule rule = context.getRule(); - if (rule.getLabel().getPackageFragment().equals(EXTERNAL)) { + if (rule.getLabel().getPackageFragment().equals(Label.EXTERNAL_PACKAGE_NAME)) { // //external: labels are special. They have access to everything and visibility is checked // at the edge that points to the //external: label. return; diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/Label.java b/src/main/java/com/google/devtools/build/lib/cmdline/Label.java index b3b31f42a1..ef5d9f465d 100644 --- a/src/main/java/com/google/devtools/build/lib/cmdline/Label.java +++ b/src/main/java/com/google/devtools/build/lib/cmdline/Label.java @@ -41,7 +41,12 @@ import java.io.Serializable; @SkylarkModule(name = "Label", doc = "A BUILD target identifier.") @Immutable @ThreadSafe public final class Label implements Comparable<Label>, Serializable, SkylarkPrintableValue { - private static final PathFragment EXTERNAL = new PathFragment("external"); + public static final PathFragment EXTERNAL_PACKAGE_NAME = new PathFragment("external"); + + public static final PackageIdentifier EXTERNAL_PACKAGE_IDENTIFIER = + PackageIdentifier.createInDefaultRepo(EXTERNAL_PACKAGE_NAME); + + public static final String EXTERNAL_PATH_PREFIX = "external"; /** * Factory for Labels from absolute string form. e.g. @@ -380,7 +385,7 @@ public final class Label implements Comparable<Label>, Serializable, SkylarkPrin if (packageIdentifier.getRepository().isDefault() || !relative.packageIdentifier.getRepository().isDefault() - || relative.packageIdentifier.getPackageFragment().equals(EXTERNAL)) { + || relative.packageIdentifier.getPackageFragment().equals(EXTERNAL_PACKAGE_NAME)) { return relative; } else { try { diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java b/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java index e992366f22..7ce70db0a1 100644 --- a/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java +++ b/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java @@ -48,10 +48,10 @@ import javax.annotation.concurrent.Immutable; */ @Immutable public final class PackageIdentifier implements Comparable<PackageIdentifier>, Serializable { - public static final String EXTERNAL_PREFIX = "external"; private static final Interner<PackageIdentifier> INTERNER = Interners.newWeakInterner(); + public static PackageIdentifier create(String repository, PathFragment pkgName) throws LabelSyntaxException { return create(RepositoryName.create(repository), pkgName); @@ -145,7 +145,7 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S * was invalid. */ public static Pair<RepositoryName, PathFragment> fromPathFragment(PathFragment path) { - if (path.segmentCount() < 2 || !path.getSegment(0).equals(EXTERNAL_PREFIX)) { + if (path.segmentCount() < 2 || !path.getSegment(0).equals(Label.EXTERNAL_PATH_PREFIX)) { return null; } try { @@ -221,7 +221,7 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S public PathFragment getPathFragment() { return isDefault() ? PathFragment.EMPTY_FRAGMENT - : new PathFragment(EXTERNAL_PREFIX).getRelative(strippedName()); + : new PathFragment(Label.EXTERNAL_PATH_PREFIX).getRelative(strippedName()); } /** diff --git a/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java index 2eaa945461..3fe711c1da 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java +++ b/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.packages; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.BuildType.SelectorList; @@ -32,8 +33,12 @@ import javax.annotation.Nullable; */ public abstract class AbstractAttributeMapper implements AttributeMap { - private static final PathFragment VISIBILITY = new PathFragment("visibility"); - private static final PathFragment EXTERNAL = new PathFragment("external"); + /** + * Package names that aren't made relative to the current repository because they mean special + * things to Bazel. + */ + private static final ImmutableSet<PathFragment> ABSOLUTE_PACKAGE_NAMES = ImmutableSet.of( + new PathFragment("visibility"), Label.EXTERNAL_PACKAGE_NAME); private final Package pkg; private final RuleClass ruleClass; @@ -168,8 +173,7 @@ public abstract class AbstractAttributeMapper implements AttributeMap { // generally tools, which go to the main repository. absoluteLabel = label; } else if (label.getPackageIdentifier().getRepository().isDefault() - && (VISIBILITY.equals(label.getPackageIdentifier().getPackageFragment()) - || EXTERNAL.equals(label.getPackageIdentifier().getPackageFragment()))) { + && ABSOLUTE_PACKAGE_NAMES.contains(label.getPackageIdentifier().getPackageFragment())) { // //visibility: and //external: labels must also be special-cased :( absoluteLabel = label; } else { diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java index a9ad155b11..4dcd817937 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/Package.java +++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java @@ -61,16 +61,6 @@ import java.util.Set; */ public class Package { - public static PackageIdentifier EXTERNAL_PACKAGE_IDENTIFIER; - - static { - try { - Package.EXTERNAL_PACKAGE_IDENTIFIER = PackageIdentifier.parse("//external"); - } catch (LabelSyntaxException e) { - throw new IllegalStateException(); - } - } - /** * Common superclass for all name-conflict exceptions. */ @@ -728,7 +718,7 @@ public class Package { } public static LegacyBuilder newExternalPackageBuilder(Path workspacePath, String runfilesPrefix) { - LegacyBuilder b = new LegacyBuilder(EXTERNAL_PACKAGE_IDENTIFIER, runfilesPrefix); + LegacyBuilder b = new LegacyBuilder(Label.EXTERNAL_PACKAGE_IDENTIFIER, runfilesPrefix); b.setFilename(workspacePath); b.setMakeEnv(new MakeEnvironment.Builder()); return b; @@ -811,7 +801,7 @@ public class Package { /** Determine if we are in the WORKSPACE file or not */ public boolean isWorkspace() { - return pkg.getPackageIdentifier().equals(EXTERNAL_PACKAGE_IDENTIFIER); + return pkg.getPackageIdentifier().equals(Label.EXTERNAL_PACKAGE_IDENTIFIER); } /** 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 d13ca101a2..44e0eb9a3e 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 @@ -17,6 +17,7 @@ package com.google.devtools.build.lib.rules.repository; import com.google.common.base.Preconditions; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.RuleDefinition; +import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; @@ -369,7 +370,7 @@ public abstract class RepositoryFunction { @Nullable public static Package getExternalPackage(Environment env) throws RepositoryFunctionException { - SkyKey packageKey = PackageValue.key(Package.EXTERNAL_PACKAGE_IDENTIFIER); + SkyKey packageKey = PackageValue.key(Label.EXTERNAL_PACKAGE_IDENTIFIER); PackageValue packageValue; try { packageValue = (PackageValue) env.getValueOrThrow(packageKey, @@ -377,7 +378,7 @@ public abstract class RepositoryFunction { } catch (NoSuchPackageException e) { throw new RepositoryFunctionException( new BuildFileNotFoundException( - Package.EXTERNAL_PACKAGE_IDENTIFIER, "Could not load //external package"), + Label.EXTERNAL_PACKAGE_IDENTIFIER, "Could not load //external package"), Transience.PERSISTENT); } if (packageValue == null) { @@ -388,7 +389,7 @@ public abstract class RepositoryFunction { if (externalPackage.containsErrors()) { throw new RepositoryFunctionException( new BuildFileContainsErrorsException( - Package.EXTERNAL_PACKAGE_IDENTIFIER, "Could not load //external package"), + Label.EXTERNAL_PACKAGE_IDENTIFIER, "Could not load //external package"), Transience.PERSISTENT); } return externalPackage; @@ -425,7 +426,7 @@ public abstract class RepositoryFunction { if (rule == null) { throw new RepositoryFunctionException( new BuildFileContainsErrorsException( - Package.EXTERNAL_PACKAGE_IDENTIFIER, + Label.EXTERNAL_PACKAGE_IDENTIFIER, "The repository named '" + repositoryName + "' could not be resolved"), Transience.PERSISTENT); } @@ -469,7 +470,7 @@ public abstract class RepositoryFunction { public static Path getExternalRepositoryDirectory(BlazeDirectories directories) { return directories .getOutputBase() - .getRelative(Package.EXTERNAL_PACKAGE_IDENTIFIER.getPackageFragment()); + .getRelative(Label.EXTERNAL_PATH_PREFIX); } /** diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java b/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java index f21e4ca0c9..59bc07faaa 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java @@ -14,7 +14,7 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.base.Preconditions; -import com.google.devtools.build.lib.cmdline.PackageIdentifier; +import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.vfs.RootedPath; import com.google.devtools.build.skyframe.SkyFunction; @@ -92,7 +92,7 @@ public class ExternalFilesHelper { // files is small. // TODO(kchodorow): check that the path is under output_base/external before adding the dep. PackageValue pkgValue = (PackageValue) env.getValue(PackageValue.key( - PackageIdentifier.createInDefaultRepo(PackageIdentifier.EXTERNAL_PREFIX))); + Label.EXTERNAL_PACKAGE_IDENTIFIER)); if (pkgValue == null) { return; } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java index ce1b4c3a20..34b4907f30 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java @@ -394,10 +394,10 @@ public class PackageFunction implements SkyFunction { } } - if (packageId.equals(Package.EXTERNAL_PACKAGE_IDENTIFIER)) { + if (packageId.equals(Label.EXTERNAL_PACKAGE_IDENTIFIER)) { return getExternalPackage(env, packageLookupValue.getRoot()); } - SkyKey externalPackageKey = PackageValue.key(Package.EXTERNAL_PACKAGE_IDENTIFIER); + SkyKey externalPackageKey = PackageValue.key(Label.EXTERNAL_PACKAGE_IDENTIFIER); PackageValue externalPackage = (PackageValue) env.getValue(externalPackageKey); if (externalPackage == null) { return null; @@ -405,7 +405,7 @@ public class PackageFunction implements SkyFunction { Package externalPkg = externalPackage.getPackage(); if (externalPkg.containsErrors()) { throw new PackageFunctionException( - new BuildFileContainsErrorsException(Package.EXTERNAL_PACKAGE_IDENTIFIER), + new BuildFileContainsErrorsException(Label.EXTERNAL_PACKAGE_IDENTIFIER), Transience.PERSISTENT); } @@ -947,7 +947,7 @@ public class PackageFunction implements SkyFunction { private static class BadWorkspaceFileException extends NoSuchPackageException { private BadWorkspaceFileException(String message) { super( - Package.EXTERNAL_PACKAGE_IDENTIFIER, + Label.EXTERNAL_PACKAGE_IDENTIFIER, "Error encountered while dealing with the WORKSPACE file: " + message); } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java index 36350f5c31..9a53dd317b 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java @@ -14,11 +14,11 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.collect.ImmutableSet; +import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelValidator; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.packages.BuildFileNotFoundException; import com.google.devtools.build.lib.packages.NoSuchPackageException; -import com.google.devtools.build.lib.packages.Package; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.vfs.Path; @@ -57,7 +57,7 @@ public class PackageLookupFunction implements SkyFunction { if (!packageKey.getRepository().equals(PackageIdentifier.MAIN_REPOSITORY_NAME) && !packageKey.getRepository().isDefault()) { return computeExternalPackageLookupValue(skyKey, env, packageKey); - } else if (packageKey.equals(Package.EXTERNAL_PACKAGE_IDENTIFIER)) { + } else if (packageKey.equals(Label.EXTERNAL_PACKAGE_IDENTIFIER)) { return computeWorkspaceLookupValue(env, packageKey); } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java index a1bb468638..84db2d3c8f 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java @@ -15,7 +15,7 @@ package com.google.devtools.build.lib.skyframe; import com.google.devtools.build.lib.analysis.BlazeDirectories; -import com.google.devtools.build.lib.cmdline.PackageIdentifier; +import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.Package.LegacyBuilder; import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.RuleClassProvider; @@ -106,7 +106,7 @@ public class WorkspaceFileFunction implements SkyFunction { // Load skylark imports PackageFunction.SkylarkImportResult importResult; importResult = PackageFunction.fetchImportsFromBuildFile(repoWorkspace, - PackageIdentifier.createInDefaultRepo("external"), + Label.EXTERNAL_PACKAGE_IDENTIFIER, parser.getBuildFileAST(), skyEnvironment, null); |