Shuffle around all the constants related to the name of the //external package and the prefix of external packages in the execroot.

This is in preparation for renaming that path segment from "external" to "bazel-external" so that we can provide a symlink to it from the source tree so that the source tree looks like the execroot.

--
MOS_MIGRATED_REVID=109882753
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 c1ff11f..c10c410 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.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 @@
  * 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 @@
     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 b3b31f4..ef5d9f4 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 @@
 @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 @@
 
     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 e992366..7ce70db 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 @@
  */
 @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 @@
      * 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 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 2eaa945..3fe711c 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 @@
 
 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 @@
  */
 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 @@
           // 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 a9ad155..4dcd817 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 @@
  */
 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 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 @@
 
     /** 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 d13ca10..44e0eb9 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 @@
 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 @@
   @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 @@
     } 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 @@
     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 @@
     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 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 f21e4ca..59bc07f 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 @@
       // 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 ce1b4c3..34b4907 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 @@
       }
     }
 
-    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 @@
     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 @@
   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 36350f5..9a53dd3 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 @@
     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 a1bb468..84db2d3 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 @@
     // Load skylark imports
     PackageFunction.SkylarkImportResult importResult;
     importResult = PackageFunction.fetchImportsFromBuildFile(repoWorkspace,
-            PackageIdentifier.createInDefaultRepo("external"),
+            Label.EXTERNAL_PACKAGE_IDENTIFIER,
             parser.getBuildFileAST(),
             skyEnvironment,
             null);