Rollback of accidentally submitted change.

--
MOS_MIGRATED_REVID=97648982
diff --git a/src/main/java/com/google/devtools/build/lib/packages/CachingPackageLocator.java b/src/main/java/com/google/devtools/build/lib/packages/CachingPackageLocator.java
index 3d677990..f6badad 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/CachingPackageLocator.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/CachingPackageLocator.java
@@ -40,6 +40,6 @@
    * <p> This method must be thread-safe.
    */
   @ThreadSafe
-  Path getBuildFileForPackage(PackageIdentifier packageName);
+  Path getBuildFileForPackage(String packageName);
 
 }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/GlobCache.java b/src/main/java/com/google/devtools/build/lib/packages/GlobCache.java
index 43669a8..de9bfdf 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/GlobCache.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/GlobCache.java
@@ -23,6 +23,7 @@
 import com.google.devtools.build.lib.concurrent.ThreadSafety;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.Path;
+import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.Symlinks;
 import com.google.devtools.build.lib.vfs.UnixGlob;
 
@@ -106,6 +107,7 @@
     this.syscalls = syscalls == null ? new AtomicReference<>(UnixGlob.DEFAULT_SYSCALLS) : syscalls;
 
     Preconditions.checkNotNull(locator);
+    final PathFragment pkgNameFrag = packageId.getPackageFragment();
     childDirectoryPredicate = new Predicate<Path>() {
       @Override
       public boolean apply(Path directory) {
@@ -113,9 +115,7 @@
           return true;
         }
 
-        PackageIdentifier subPackageId = new PackageIdentifier(
-            packageId.getRepository(),
-            packageId.getPackageFragment().getRelative(directory.relativeTo(packageDirectory)));
+        PathFragment pkgName = pkgNameFrag.getRelative(directory.relativeTo(packageDirectory));
         UnixGlob.FilesystemCalls syscalls = GlobCache.this.syscalls.get();
         if (syscalls != UnixGlob.DEFAULT_SYSCALLS) {
           // This is needed because in case the BUILD file exists, we do not call readdir() on its
@@ -134,7 +134,7 @@
           syscalls.statNullable(directory.getChild("BUILD"), Symlinks.FOLLOW);
         }
 
-        return locator.getBuildFileForPackage(subPackageId) == null;
+        return locator.getBuildFileForPackage(pkgName.getPathString()) == null;
       }
     };
   }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageIdentifier.java b/src/main/java/com/google/devtools/build/lib/packages/PackageIdentifier.java
index 803fb48..f2f5b8e 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageIdentifier.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageIdentifier.java
@@ -16,7 +16,6 @@
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ComparisonChain;
-import com.google.devtools.build.lib.cmdline.LabelValidator;
 import com.google.devtools.build.lib.syntax.Label.SyntaxException;
 import com.google.devtools.build.lib.util.StringCanonicalizer;
 import com.google.devtools.build.lib.util.StringUtilities;
@@ -218,34 +217,6 @@
     this.pkgName = Canonicalizer.fragments().intern(pkgName.normalize());
   }
 
-  public static PackageIdentifier parse(String input) throws SyntaxException {
-    String repo;
-    String packageName;
-    int packageStartPos = input.indexOf("//");
-    if (packageStartPos > 0) {
-      repo = input.substring(0, packageStartPos);
-      packageName = input.substring(packageStartPos + 2);
-    } else if (packageStartPos == 0) {
-      repo = PackageIdentifier.DEFAULT_REPOSITORY;
-      packageName = input.substring(2);
-    } else {
-      repo = PackageIdentifier.DEFAULT_REPOSITORY;
-      packageName = input;
-    }
-
-    String error = RepositoryName.validate(repo);
-    if (error != null) {
-      throw new SyntaxException(error);
-    }
-
-    error = LabelValidator.validatePackageName(packageName);
-    if (error != null) {
-      throw new SyntaxException(error);
-    }
-
-    return new PackageIdentifier(repo, new PathFragment(packageName));
-  }
-
   private Object writeReplace() throws ObjectStreamException {
     return new SerializationProxy(this);
   }
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java
index daba8f1..e57fe0d 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java
@@ -16,7 +16,6 @@
 
 import com.google.devtools.build.lib.Constants;
 import com.google.devtools.build.lib.packages.ConstantRuleVisibility;
-import com.google.devtools.build.lib.packages.PackageIdentifier;
 import com.google.devtools.build.lib.packages.RuleVisibility;
 import com.google.devtools.build.lib.syntax.CommaSeparatedPackageNameListConverter;
 import com.google.devtools.common.options.Converter;
@@ -111,7 +110,7 @@
           + "encounters a label '//x:y/z' if that is still provided by another "
           + "package_path entry.  Specifying --deleted_packages x/y avoids this "
           + "problem.")
-  public List<PackageIdentifier> deletedPackages;
+  public List<String> deletedPackages;
 
   @Option(name = "default_visibility",
       defaultValue = "private",
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/PackageProvider.java b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageProvider.java
index 9bce541..5363cb5 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/PackageProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageProvider.java
@@ -59,5 +59,5 @@
    * @param eventHandler the eventHandler on which to report warnings and errors
    * @param packageName the name of the package.
    */
-  boolean isPackage(EventHandler eventHandler, PackageIdentifier packageName);
+  boolean isPackage(EventHandler eventHandler, String packageName);
 }
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java b/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java
index 27b072f..c8204c6 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java
@@ -13,8 +13,6 @@
 // limitations under the License.
 package com.google.devtools.build.lib.pkgcache;
 
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.events.Event;
@@ -28,9 +26,6 @@
 import com.google.devtools.build.lib.vfs.Symlinks;
 import com.google.devtools.build.lib.vfs.UnixGlob;
 
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -50,27 +45,33 @@
 
   public static final Set<String> DEFAULT_TOP_LEVEL_EXCLUDES = ImmutableSet.of("experimental");
 
-  private final ImmutableList<Path> pathEntries;
-  private final Path outputBase;
+  /**
+   * An interface which accepts {@link PathFragment}s.
+   */
+  public interface AcceptsPathFragment {
 
-  private PathPackageLocator(Path outputBase, List<Path> pathEntries) {
-    this.outputBase = outputBase;
-    this.pathEntries = ImmutableList.copyOf(pathEntries);
+    /**
+     * Accept a {@link PathFragment}.
+     *
+     * @param fragment The path fragment.
+     */
+    void accept(PathFragment fragment);
   }
 
+  private final ImmutableList<Path> pathEntries;
+
   /**
    * Constructs a PathPackageLocator based on the specified list of package root directories.
    */
-  @VisibleForTesting
   public PathPackageLocator(List<Path> pathEntries) {
-    this(null, pathEntries);
+    this.pathEntries = ImmutableList.copyOf(pathEntries);
   }
 
   /**
    * Constructs a PathPackageLocator based on the specified array of package root directories.
    */
   public PathPackageLocator(Path... pathEntries) {
-    this(null, Arrays.asList(pathEntries));
+    this(Arrays.asList(pathEntries));
   }
 
   /**
@@ -86,10 +87,11 @@
    * <p>If the same package exists beneath multiple package path entries, the
    * first path that matches always wins.
    */
-  public Path getPackageBuildFile(PackageIdentifier packageName) throws NoSuchPackageException {
+  public Path getPackageBuildFile(String packageName) throws NoSuchPackageException {
     Path buildFile  = getPackageBuildFileNullable(packageName, UnixGlob.DEFAULT_SYSCALLS_REF);
     if (buildFile == null) {
-      throw new BuildFileNotFoundException(packageName, "BUILD file not found on package path");
+      throw new BuildFileNotFoundException(PackageIdentifier.createInDefaultRepo(packageName),
+          "BUILD file not found on package path");
     }
     return buildFile;
   }
@@ -100,25 +102,9 @@
    * @param packageName the name of the package.
    * @param cache a filesystem-level cache of stat() calls.
    */
-  public Path getPackageBuildFileNullable(PackageIdentifier packageName,
+  public Path getPackageBuildFileNullable(String packageName,
       AtomicReference<? extends UnixGlob.FilesystemCalls> cache)  {
-    if (packageName.getRepository().isDefault()) {
-      return getFilePath(packageName.getPackageFragment().getRelative("BUILD"), cache);
-    } else if (outputBase != null) {
-      // This works only to some degree, because it relies on the presence of the repository under
-      // $OUTPUT_BASE/external, which is created by the appropriate RepositoryValue. This is true
-      // for the invocation in GlobCache, but not for the locator.getBuildFileForPackage()
-      // invocation in Parser#include().
-      Path buildFile = outputBase.getRelative(packageName.getPathFragment()).getRelative("BUILD");
-      FileStatus stat = cache.get().statNullable(buildFile, Symlinks.FOLLOW);
-      if (stat != null && stat.isFile()) {
-        return buildFile;
-      } else {
-        return null;
-      }
-    } else {
-      return null;
-    }
+    return getFilePath(new PathFragment(packageName).getRelative("BUILD"), cache);
   }
 
 
@@ -138,7 +124,6 @@
    * A factory of PathPackageLocators from a list of path elements.  Elements
    * may contain "%workspace%", indicating the workspace.
    *
-   * @param outputBase the output base. Can be null if remote repositories are not in use.
    * @param pathElements Each element must be an absolute path, relative path,
    *                     or some string "%workspace%" + relative, where relative is itself a
    *                     relative path.  The special symbol "%workspace%" means to interpret
@@ -150,8 +135,7 @@
    * @param clientWorkingDirectory The client's working directory.
    * @return a list of {@link Path}s.
    */
-  public static PathPackageLocator create(Path outputBase,
-                                          List<String> pathElements,
+  public static PathPackageLocator create(List<String> pathElements,
                                           EventHandler eventHandler,
                                           Path workspace,
                                           Path clientWorkingDirectory) {
@@ -180,7 +164,7 @@
         resolvedPaths.add(rootPath);
       }
     }
-    return new PathPackageLocator(outputBase, resolvedPaths);
+    return new PathPackageLocator(resolvedPaths);
   }
 
   /**
@@ -210,7 +194,7 @@
 
   @Override
   public int hashCode() {
-    return Objects.hashCode(pathEntries, outputBase);
+    return pathEntries.hashCode();
   }
 
   @Override
@@ -221,15 +205,6 @@
     if (!(other instanceof PathPackageLocator)) {
       return false;
     }
-    return this.getPathEntries().equals(((PathPackageLocator) other).getPathEntries())
-        && Objects.equal(this.outputBase, ((PathPackageLocator) other).outputBase);
-  }
-
-  private void writeObject(ObjectOutputStream out) throws IOException {
-    out.writeObject(pathEntries);
-  }
-
-  private void readObject(ObjectInputStream in) throws IOException {
-    throw new IllegalStateException();
+    return this.getPathEntries().equals(((PathPackageLocator) other).getPathEntries());
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
index bbc432e..2aae12f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
@@ -461,7 +461,7 @@
     }
 
     @Override
-    public boolean isPackage(EventHandler eventHandler, PackageIdentifier packageName) {
+    public boolean isPackage(EventHandler eventHandler, String packageName) {
       throw new UnsupportedOperationException();
     }
   }
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index fcd11e5..fca2ae9 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -1014,7 +1014,7 @@
     if (!skyframeExecutor.hasIncrementalState()) {
       clearSkyframeRelevantCaches();
     }
-    skyframeExecutor.sync(packageCacheOptions, getOutputBase(), getWorkingDirectory(),
+    skyframeExecutor.sync(packageCacheOptions, getWorkingDirectory(),
         defaultsPackageContents, getCommandId());
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java
index 133179f..bec0deb 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/ProjectFileSupport.java
@@ -63,11 +63,8 @@
       // relative to the cwd instead.
       PathFragment projectFilePath = new PathFragment(targets.get(0).substring(1));
       List<Path> packagePath = PathPackageLocator.create(
-          runtime.getOutputBase(),
-          optionsParser.getOptions(PackageCacheOptions.class).packagePath,
-          runtime.getReporter(),
-          runtime.getWorkspace(),
-          runtime.getWorkingDirectory()).getPathEntries();
+          optionsParser.getOptions(PackageCacheOptions.class).packagePath, runtime.getReporter(),
+          runtime.getWorkspace(), runtime.getWorkingDirectory()).getPathEntries();
       ProjectFile projectFile = projectFileProvider.getProjectFile(packagePath, projectFilePath);
       runtime.getReporter().handle(Event.info("Using " + projectFile.getName()));
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java b/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
index ac5b6a2..9ea6210 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
@@ -64,9 +64,9 @@
   }
 
   @Override
-  public boolean isPackage(EventHandler eventHandler, PackageIdentifier packageId)
+  public boolean isPackage(EventHandler eventHandler, String packageName)
       throws MissingDepException {
-    SkyKey packageLookupKey = PackageLookupValue.key(packageId);
+    SkyKey packageLookupKey = PackageLookupValue.key(new PathFragment(packageName));
     try {
       PackageLookupValue packageLookupValue =
           (PackageLookupValue) env.getValueOrThrow(packageLookupKey, NoSuchPackageException.class,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java
index 942a201..d1ee81c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunction.java
@@ -18,7 +18,6 @@
 import com.google.common.cache.CacheBuilder;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.packages.PackageIdentifier;
 import com.google.devtools.build.lib.vfs.Dirent;
 import com.google.devtools.build.lib.vfs.Dirent.Type;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -61,9 +60,8 @@
     PathFragment globSubdir = glob.getSubdir();
     if (!globSubdir.equals(PathFragment.EMPTY_FRAGMENT)) {
       PackageLookupValue globSubdirPkgLookupValue = (PackageLookupValue) env.getValue(
-          PackageLookupValue.key(new PackageIdentifier(
-              glob.getPackageId().getRepository(),
-              glob.getPackageId().getPackageFragment().getRelative(globSubdir))));
+          PackageLookupValue.key(glob.getPackageId().getPackageFragment()
+              .getRelative(globSubdir)));
       if (globSubdirPkgLookupValue == null) {
         return null;
       }
@@ -222,8 +220,7 @@
         PathFragment directory = glob.getPackageId().getPackageFragment()
             .getRelative(glob.getSubdir()).getRelative(fileName);
         PackageLookupValue pkgLookupValue = (PackageLookupValue)
-            env.getValue(PackageLookupValue.key(new PackageIdentifier(
-                glob.getPackageId().getRepository(), directory)));
+            env.getValue(PackageLookupValue.key(directory));
         if (pkgLookupValue == null) {
           return;
         }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java b/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java
index 4b701dd..e2c83a0 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java
@@ -68,8 +68,8 @@
   }
 
   @Override
-  public boolean isPackage(EventHandler eventHandler, PackageIdentifier packageName) {
-    SkyKey packageLookupKey = PackageLookupValue.key(packageName);
+  public boolean isPackage(EventHandler eventHandler, String packageName) {
+    SkyKey packageLookupKey = PackageLookupValue.key(new PathFragment(packageName));
     if (!graph.exists(packageLookupKey)) {
       // If the package lookup key does not exist in the graph, then it must not correspond to any
       // package, because the SkyQuery environment has already loaded the universe.
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 c634d08..a4996a4 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
@@ -41,9 +41,9 @@
  */
 class PackageLookupFunction implements SkyFunction {
 
-  private final AtomicReference<ImmutableSet<PackageIdentifier>> deletedPackages;
+  private final AtomicReference<ImmutableSet<String>> deletedPackages;
 
-  PackageLookupFunction(AtomicReference<ImmutableSet<PackageIdentifier>> deletedPackages) {
+  PackageLookupFunction(AtomicReference<ImmutableSet<String>> deletedPackages) {
     this.deletedPackages = deletedPackages;
   }
 
@@ -64,7 +64,7 @@
           + packageNameErrorMsg);
     }
 
-    if (deletedPackages.get().contains(packageKey)) {
+    if (deletedPackages.get().contains(packageKey.getPackageFragment().toString())) {
       return PackageLookupValue.deletedPackage();
     }
 
@@ -142,7 +142,7 @@
       throws PackageLookupFunctionException {
     PackageIdentifier id = (PackageIdentifier) skyKey.argument();
     SkyKey repositoryKey = RepositoryValue.key(id.getRepository());
-    RepositoryValue repositoryValue;
+    RepositoryValue repositoryValue = null;
     try {
       repositoryValue = (RepositoryValue) env.getValueOrThrow(
           repositoryKey, NoSuchPackageException.class, IOException.class, EvalException.class);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java
index 2fa6ca9..bf32843 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java
@@ -187,10 +187,7 @@
 
     @Override
     public boolean isPackage(String packageName) {
-      // TODO(bazel-team): this should get the whole PackageIdentifier. Using only the package name
-      // makes it impossible to use wildcards to refer to targets in remote repositories.
-      return packageProvider.isPackage(env.getListener(),
-          PackageIdentifier.createInDefaultRepo(packageName));
+      return packageProvider.isPackage(env.getListener(), packageName);
     }
 
     @Override
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java
index b913628..942ed83 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePackageProviderBackedTargetPatternResolver.java
@@ -132,10 +132,7 @@
 
   @Override
   public boolean isPackage(String packageName) {
-    // TODO(bazel-team): this should get the whole PackageIdentifier. Using only the package name
-    // makes it impossible to use the //... wildcard to refer to targets in remote repositories.
-    return recursivePackageProvider.isPackage(
-        eventHandler, PackageIdentifier.createInDefaultRepo(packageName));
+    return recursivePackageProvider.isPackage(eventHandler, packageName);
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
index a1ac8e2..ef22ab9 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
@@ -211,12 +211,11 @@
   }
 
   @Override
-  public void sync(PackageCacheOptions packageCacheOptions, Path outputBase, Path workingDirectory,
+  public void sync(PackageCacheOptions packageCacheOptions, Path workingDirectory,
                    String defaultsPackageContents, UUID commandId)
       throws InterruptedException, AbruptExitException {
     this.valueCacheEvictionLimit = packageCacheOptions.minLoadedPkgCountForCtNodeEviction;
-    super.sync(
-        packageCacheOptions, outputBase, workingDirectory, defaultsPackageContents, commandId);
+    super.sync(packageCacheOptions, workingDirectory, defaultsPackageContents, commandId);
     handleDiffs();
   }
 
@@ -244,10 +243,11 @@
     recordingDiffer.invalidate(Iterables.filter(memoizingEvaluator.getValues().keySet(), pred));
   }
 
-  private void invalidateDeletedPackages(Iterable<PackageIdentifier> deletedPackages) {
+  private void invalidateDeletedPackages(Iterable<String> deletedPackages) {
     ArrayList<SkyKey> packagesToInvalidate = Lists.newArrayList();
-    for (PackageIdentifier deletedPackage : deletedPackages) {
-      packagesToInvalidate.add(PackageLookupValue.key(deletedPackage));
+    for (String deletedPackage : deletedPackages) {
+      PathFragment pathFragment = new PathFragment(deletedPackage);
+      packagesToInvalidate.add(PackageLookupValue.key(pathFragment));
     }
     recordingDiffer.invalidate(packagesToInvalidate);
   }
@@ -257,7 +257,7 @@
    */
   @Override
   @VisibleForTesting  // productionVisibility = Visibility.PRIVATE
-  public void setDeletedPackages(Iterable<PackageIdentifier> pkgs) {
+  public void setDeletedPackages(Iterable<String> pkgs) {
     // Invalidate the old deletedPackages as they may exist now.
     invalidateDeletedPackages(deletedPackages.get());
     deletedPackages.set(ImmutableSet.copyOf(pkgs));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 79acbe0..b2ed3c6 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -183,8 +183,8 @@
       new AtomicReference<>(UnixGlob.DEFAULT_SYSCALLS);
   protected final AtomicReference<PathPackageLocator> pkgLocator =
       new AtomicReference<>();
-  protected final AtomicReference<ImmutableSet<PackageIdentifier>> deletedPackages =
-      new AtomicReference<>(ImmutableSet.<PackageIdentifier>of());
+  protected final AtomicReference<ImmutableSet<String>> deletedPackages =
+      new AtomicReference<>(ImmutableSet.<String>of());
   private final AtomicReference<EventBus> eventBus = new AtomicReference<>();
 
   private final ImmutableList<BuildInfoFactory> buildInfoFactories;
@@ -756,7 +756,7 @@
    * Sets the packages that should be treated as deleted and ignored.
    */
   @VisibleForTesting  // productionVisibility = Visibility.PRIVATE
-  public abstract void setDeletedPackages(Iterable<PackageIdentifier> pkgs);
+  public abstract void setDeletedPackages(Iterable<String> pkgs);
 
   /**
    * Prepares the evaluator for loading.
@@ -1302,7 +1302,7 @@
     /**
      * Returns whether the given package should be consider deleted and thus should be ignored.
      */
-    public boolean isPackageDeleted(PackageIdentifier packageName) {
+    public boolean isPackageDeleted(String packageName) {
       return deletedPackages.get().contains(packageName);
     }
 
@@ -1352,13 +1352,12 @@
   @ThreadCompatible
   public abstract void updateLoadedPackageSet(Set<PackageIdentifier> loadedPackages);
 
-  public void sync(PackageCacheOptions packageCacheOptions, Path outputBase, Path workingDirectory,
+  public void sync(PackageCacheOptions packageCacheOptions, Path workingDirectory,
       String defaultsPackageContents, UUID commandId) throws InterruptedException,
       AbruptExitException{
 
     preparePackageLoading(
-        createPackageLocator(
-            packageCacheOptions, outputBase, directories.getWorkspace(), workingDirectory),
+        createPackageLocator(packageCacheOptions, directories.getWorkspace(), workingDirectory),
         packageCacheOptions.defaultVisibility, packageCacheOptions.showLoadingProgress,
         packageCacheOptions.globbingThreads, defaultsPackageContents, commandId);
     setDeletedPackages(ImmutableSet.copyOf(packageCacheOptions.deletedPackages));
@@ -1368,9 +1367,9 @@
   }
 
   protected PathPackageLocator createPackageLocator(PackageCacheOptions packageCacheOptions,
-      Path outputBase, Path workspace, Path workingDirectory) throws AbruptExitException {
+      Path workspace, Path workingDirectory) throws AbruptExitException{
     return PathPackageLocator.create(
-        outputBase, packageCacheOptions.packagePath, getReporter(), workspace, workingDirectory);
+        packageCacheOptions.packagePath, getReporter(), workspace, workingDirectory);
   }
 
   private CyclesReporter createCyclesReporter() {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageManager.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageManager.java
index 7ffb79ce..3e9b6ca 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageManager.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframePackageManager.java
@@ -13,6 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.skyframe;
 
+import com.google.devtools.build.lib.cmdline.LabelValidator;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.packages.NoSuchPackageException;
@@ -135,7 +136,7 @@
   }
 
   @Override
-  public boolean isPackage(EventHandler eventHandler, PackageIdentifier packageName) {
+  public boolean isPackage(EventHandler eventHandler, String packageName) {
     return getBuildFileForPackage(packageName) != null;
   }
 
@@ -146,10 +147,11 @@
 
   @ThreadSafe
   @Override
-  public Path getBuildFileForPackage(PackageIdentifier packageName) {
+  public Path getBuildFileForPackage(String packageName) {
     // Note that this method needs to be thread-safe, as it is currently used concurrently by
     // legacy blaze code.
-    if (packageLoader.isPackageDeleted(packageName)) {
+    if (packageLoader.isPackageDeleted(packageName)
+        || LabelValidator.validatePackageName(packageName) != null) {
       return null;
     }
     // TODO(bazel-team): Use a PackageLookupValue here [skyframe-loading]
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/CommaSeparatedPackageNameListConverter.java b/src/main/java/com/google/devtools/build/lib/syntax/CommaSeparatedPackageNameListConverter.java
index ce7680c..070e928 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/CommaSeparatedPackageNameListConverter.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/CommaSeparatedPackageNameListConverter.java
@@ -16,7 +16,7 @@
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.packages.PackageIdentifier;
+import com.google.devtools.build.lib.cmdline.LabelValidator;
 import com.google.devtools.common.options.Converter;
 import com.google.devtools.common.options.OptionsParsingException;
 
@@ -26,22 +26,22 @@
  * A converter from strings containing comma-separated names of packages to lists of strings.
  */
 public class CommaSeparatedPackageNameListConverter
-    implements Converter<List<PackageIdentifier>> {
+    implements Converter<List<String>> {
 
   private static final Splitter SPACE_SPLITTER = Splitter.on(',');
 
   @Override
-  public List<PackageIdentifier> convert(String input) throws OptionsParsingException {
+  public List<String> convert(String input) throws OptionsParsingException {
     if (Strings.isNullOrEmpty(input)) {
       return ImmutableList.of();
     }
-    ImmutableList.Builder<PackageIdentifier> list = ImmutableList.builder();
+    ImmutableList.Builder<String> list = ImmutableList.builder();
     for (String s : SPACE_SPLITTER.split(input)) {
-      try {
-        list.add(PackageIdentifier.parse(s));
-      } catch (Label.SyntaxException e) {
-        throw new OptionsParsingException(e.getMessage());
+      String errorMessage = LabelValidator.validatePackageName(s);
+      if (errorMessage != null) {
+        throw new OptionsParsingException(errorMessage);
       }
+      list.add(s);
     }
     return list.build();
   }
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvaluationContext.java b/src/main/java/com/google/devtools/build/lib/syntax/EvaluationContext.java
index f91222c..4966fb8 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/EvaluationContext.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/EvaluationContext.java
@@ -21,7 +21,6 @@
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.events.EventKind;
 import com.google.devtools.build.lib.packages.CachingPackageLocator;
-import com.google.devtools.build.lib.packages.PackageIdentifier;
 import com.google.devtools.build.lib.syntax.Environment.NoSuchVariableException;
 import com.google.devtools.build.lib.vfs.Path;
 
@@ -91,7 +90,7 @@
   /** Mock package locator */
   private static final class EmptyPackageLocator implements CachingPackageLocator {
     @Override
-    public Path getBuildFileForPackage(PackageIdentifier packageName) {
+    public Path getBuildFileForPackage(String packageName) {
       return null;
     }
   }
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
index f2f7c2c..2a9d103 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
@@ -612,13 +612,10 @@
 
     try {
       Label label = Label.parseAbsolute(labelName);
-      // Note that this doesn't really work if the label belongs to a different repository, because
-      // there is no guarantee that its RepositoryValue has been evaluated. In an ideal world, we
-      // could put a Skyframe dependency the appropriate PackageLookupValue, but we can't do that
-      // because package loading is not completely Skyframized.
-      Path packagePath = locator.getBuildFileForPackage(label.getPackageIdentifier());
+      String packageName = label.getPackageFragment().getPathString();
+      Path packagePath = locator.getBuildFileForPackage(packageName);
       if (packagePath == null) {
-        reportError(location, "Package '" + label.getPackageIdentifier() + "' not found");
+        reportError(location, "Package '" + packageName + "' not found");
         list.add(mocksubincludeExpression(labelName, "", location));
         return;
       }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
index 94975bb..e5bfd83 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java
@@ -242,7 +242,7 @@
     PackageCacheOptions packageCacheOptions = optionsParser.getOptions(PackageCacheOptions.class);
 
     PathPackageLocator pathPackageLocator = PathPackageLocator.create(
-        null, packageCacheOptions.packagePath, reporter, rootDirectory, rootDirectory);
+        packageCacheOptions.packagePath, reporter, rootDirectory, rootDirectory);
     skyframeExecutor.preparePackageLoading(pathPackageLocator,
         packageCacheOptions.defaultVisibility, true,
         7, ruleClassProvider.getDefaultsPackageContent(), UUID.randomUUID());
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index 283f231..e6fa833 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -274,7 +274,7 @@
 
   private void setUpSkyframe() {
     PathPackageLocator pkgLocator = PathPackageLocator.create(
-        null, packageCacheOptions.packagePath, reporter, rootDirectory, rootDirectory);
+        packageCacheOptions.packagePath, reporter, rootDirectory, rootDirectory);
     skyframeExecutor.preparePackageLoading(pkgLocator,
         packageCacheOptions.defaultVisibility, true,
         7, ruleClassProvider.getDefaultsPackageContent(optionsParser),
diff --git a/src/test/java/com/google/devtools/build/lib/packages/GlobCacheTest.java b/src/test/java/com/google/devtools/build/lib/packages/GlobCacheTest.java
index 392c750..bd8d536 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/GlobCacheTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/GlobCacheTest.java
@@ -94,8 +94,7 @@
     cache = new GlobCache(packageDirectory, PackageIdentifier.createInDefaultRepo("isolated"),
         new CachingPackageLocator() {
       @Override
-      public Path getBuildFileForPackage(PackageIdentifier packageId) {
-        String packageName = packageId.getPackageFragment().getPathString();
+      public Path getBuildFileForPackage(String packageName) {
         if (packageName.equals("isolated")) {
           return scratch.resolve("isolated/BUILD");
         } else if (packageName.equals("isolated/sub")) {
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
index e769e38..bc641dd 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryApparatus.java
@@ -160,7 +160,7 @@
   public static CachingPackageLocator createEmptyLocator() {
     return new CachingPackageLocator() {
       @Override
-      public Path getBuildFileForPackage(PackageIdentifier packageName) {
+      public Path getBuildFileForPackage(String packageName) {
         return null;
       }
     };
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java
index 133e76d..e789d51 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java
@@ -94,7 +94,7 @@
 
   private void setUpSkyframe(PackageCacheOptions packageCacheOptions) {
     PathPackageLocator pkgLocator = PathPackageLocator.create(
-        null, packageCacheOptions.packagePath, reporter, rootDirectory, rootDirectory);
+        packageCacheOptions.packagePath, reporter, rootDirectory, rootDirectory);
     skyframeExecutor.preparePackageLoading(pkgLocator,
         packageCacheOptions.defaultVisibility, true,
         7, ruleClassProvider.getDefaultsPackageContent(),
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/BuildFileASTTest.java b/src/test/java/com/google/devtools/build/lib/syntax/BuildFileASTTest.java
index a1b108e..8456235 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/BuildFileASTTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/BuildFileASTTest.java
@@ -25,7 +25,6 @@
 import com.google.devtools.build.lib.events.Reporter;
 import com.google.devtools.build.lib.events.util.EventCollectionApparatus;
 import com.google.devtools.build.lib.packages.CachingPackageLocator;
-import com.google.devtools.build.lib.packages.PackageIdentifier;
 import com.google.devtools.build.lib.testutil.JunitTestUtils;
 import com.google.devtools.build.lib.testutil.Scratch;
 import com.google.devtools.build.lib.vfs.Path;
@@ -46,8 +45,8 @@
 
   private class ScratchPathPackageLocator implements CachingPackageLocator {
     @Override
-    public Path getBuildFileForPackage(PackageIdentifier packageName) {
-      return scratch.resolve(packageName.getPackageFragment()).getRelative("BUILD");
+    public Path getBuildFileForPackage(String packageName) {
+      return scratch.resolve(packageName).getRelative("BUILD");
     }
   }
 
@@ -265,7 +264,7 @@
 
   private class EmptyPackageLocator implements CachingPackageLocator {
     @Override
-    public Path getBuildFileForPackage(PackageIdentifier packageName) {
+    public Path getBuildFileForPackage(String packageName) {
       return null;
     }
   }
diff --git a/src/test/shell/bazel/local_repository_test.sh b/src/test/shell/bazel/local_repository_test.sh
index bba1234..5a587e6 100755
--- a/src/test/shell/bazel/local_repository_test.sh
+++ b/src/test/shell/bazel/local_repository_test.sh
@@ -481,29 +481,4 @@
   assert_contains "Michaelangelo" bazel-genfiles/tmnt
 }
 
-function test_globs() {
-  local r=$TEST_TMPDIR/r
-  mkdir -p $r
-  cat > WORKSPACE <<EOF
-local_repository(
-    name = "r",
-    path = "$r",
-)
-
-EOF
-
-  cat > $r/BUILD <<EOF
-filegroup(
-    name = "fg",
-    srcs = glob(["**"]),
-)
-EOF
-
-  touch $r/a
-  mkdir -p $r/b
-  touch $r/b/{BUILD,b}
-
-  bazel build @r//:fg || fail "build failed"
-}
-
 run_suite "local repository tests"