diff --git a/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java b/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java
index 7b83569..0900596 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java
@@ -21,7 +21,7 @@
 import com.google.common.collect.Lists;
 import com.google.devtools.build.lib.actions.Artifact.SpecialArtifactType;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.util.Preconditions;
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenJarFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenJarFunction.java
index 18a94b7..83a7ed1 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenJarFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/MavenJarFunction.java
@@ -22,7 +22,7 @@
 import com.google.common.hash.Hashing;
 import com.google.devtools.build.lib.analysis.RuleDefinition;
 import com.google.devtools.build.lib.bazel.rules.workspace.MavenJarRule;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.packages.AggregatingAttributeMapper;
 import com.google.devtools.build.lib.packages.AttributeMap;
 import com.google.devtools.build.lib.packages.Rule;
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 b29e820..4c995eb 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
@@ -14,27 +14,14 @@
 
 package com.google.devtools.build.lib.cmdline;
 
-import com.google.common.base.Throwables;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
 import com.google.common.collect.ComparisonChain;
 import com.google.common.collect.Interner;
 import com.google.common.collect.Interners;
-import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.util.Preconditions;
-import com.google.devtools.build.lib.util.StringCanonicalizer;
-import com.google.devtools.build.lib.util.StringUtilities;
 import com.google.devtools.build.lib.vfs.Canonicalizer;
 import com.google.devtools.build.lib.vfs.PathFragment;
 
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.ObjectStreamException;
 import java.io.Serializable;
-import java.util.concurrent.ExecutionException;
-import java.util.regex.Pattern;
 
 import javax.annotation.concurrent.Immutable;
 
@@ -60,194 +47,6 @@
     return INTERNER.intern(new PackageIdentifier(repository, pkgName));
   }
 
-  /**
-   * A human-readable name for the repository.
-   */
-  public static final class RepositoryName implements Serializable {
-    private static final Pattern VALID_REPO_NAME = Pattern.compile("@[\\w\\-.]*");
-
-    /** Helper for serializing {@link RepositoryName}. */
-    private static final class SerializationProxy implements Serializable {
-      private RepositoryName repositoryName;
-
-      private SerializationProxy(RepositoryName repositoryName) {
-        this.repositoryName = repositoryName;
-      }
-
-      private void writeObject(ObjectOutputStream out) throws IOException {
-        out.writeObject(repositoryName.toString());
-      }
-
-      private void readObject(ObjectInputStream in)
-          throws IOException, ClassNotFoundException {
-        try {
-          repositoryName = RepositoryName.create((String) in.readObject());
-        } catch (LabelSyntaxException e) {
-          throw new IOException("Error serializing repository name: " + e.getMessage());
-        }
-      }
-
-      @SuppressWarnings("unused")
-      private void readObjectNoData() throws ObjectStreamException {
-      }
-
-      private Object readResolve() {
-        return repositoryName;
-      }
-    }
-
-    private void readObject(@SuppressWarnings("unused") ObjectInputStream in) throws IOException {
-      throw new IOException("Serialization is allowed only by proxy");
-    }
-
-    private Object writeReplace() {
-      return new SerializationProxy(this);
-    }
-
-    private static final LoadingCache<String, RepositoryName> repositoryNameCache =
-        CacheBuilder.newBuilder()
-          .weakValues()
-          .build(
-              new CacheLoader<String, RepositoryName> () {
-                @Override
-                public RepositoryName load(String name) throws LabelSyntaxException {
-                  String errorMessage = validate(name);
-                  if (errorMessage != null) {
-                    errorMessage = "invalid repository name '"
-                        + StringUtilities.sanitizeControlChars(name) + "': " + errorMessage;
-                    throw new LabelSyntaxException(errorMessage);
-                  }
-                  return new RepositoryName(StringCanonicalizer.intern(name));
-                }
-              });
-
-    /**
-     * Makes sure that name is a valid repository name and creates a new RepositoryName using it.
-     *
-     * @throws LabelSyntaxException if the name is invalid
-     */
-    public static RepositoryName create(String name) throws LabelSyntaxException {
-      try {
-        return repositoryNameCache.get(name);
-      } catch (ExecutionException e) {
-        Throwables.propagateIfInstanceOf(e.getCause(), LabelSyntaxException.class);
-        throw new IllegalStateException("Failed to create RepositoryName from " + name, e);
-      }
-    }
-
-    /**
-     * Extracts the repository name from a PathFragment that was created with
-     * {@code PackageIdentifier.getPathFragment}.
-     *
-     * @return a {@code Pair} of the extracted repository name and the path fragment with stripped
-     * of "external/"-prefix and repository name, or null if none was found or the repository name
-     * was invalid.
-     */
-    public static Pair<RepositoryName, PathFragment> fromPathFragment(PathFragment path) {
-      if (path.segmentCount() < 2 || !path.getSegment(0).equals(Label.EXTERNAL_PATH_PREFIX)) {
-        return null;
-      }
-      try {
-        RepositoryName repoName = RepositoryName.create("@" + path.getSegment(1));
-        PathFragment subPath = path.subFragment(2, path.segmentCount());
-        return Pair.of(repoName, subPath);
-      } catch (LabelSyntaxException e) {
-        return null;
-      }
-    }
-
-    private final String name;
-
-    private RepositoryName(String name) {
-      this.name = name;
-    }
-
-    /**
-     * Performs validity checking.  Returns null on success, an error message otherwise.
-     */
-    private static String validate(String name) {
-      if (name.isEmpty()) {
-        return null;
-      }
-
-      // Some special cases for more user-friendly error messages.
-      if (!name.startsWith("@")) {
-        return "workspace names must start with '@'";
-      }
-      if (name.equals("@.")) {
-        return "workspace names are not allowed to be '@.'";
-      }
-      if (name.equals("@..")) {
-        return "workspace names are not allowed to be '@..'";
-      }
-
-      if (!VALID_REPO_NAME.matcher(name).matches()) {
-        return "workspace names may contain only A-Z, a-z, 0-9, '-', '_' and '.'";
-      }
-
-      return null;
-    }
-
-    /**
-     * Returns the repository name without the leading "{@literal @}".  For the default repository,
-     * returns "".
-     */
-    public String strippedName() {
-      if (name.isEmpty()) {
-        return name;
-      }
-      return name.substring(1);
-    }
-
-    /**
-     * Returns if this is the default repository, that is, {@link #name} is "".
-     */
-    public boolean isDefault() {
-      return name.isEmpty();
-    }
-
-    /**
-     * Returns the repository name, with leading "{@literal @}" (or "" for the default repository).
-     */
-    // TODO(bazel-team): Use this over toString()- easier to track its usage.
-    public String getName() {
-      return name;
-    }
-
-    /**
-     * Returns the path at which this repository is mapped within the exec root.
-     */
-    public PathFragment getPathFragment() {
-      return isDefault()
-          ? PathFragment.EMPTY_FRAGMENT
-          : new PathFragment(Label.EXTERNAL_PATH_PREFIX).getRelative(strippedName());
-    }
-
-    /**
-     * Returns the repository name, with leading "{@literal @}" (or "" for the default repository).
-     */
-    @Override
-    public String toString() {
-      return name;
-    }
-
-    @Override
-    public boolean equals(Object object) {
-      if (this == object) {
-        return true;
-      }
-      if (!(object instanceof RepositoryName)) {
-        return false;
-      }
-      return name.equals(((RepositoryName) object).name);
-    }
-
-    @Override
-    public int hashCode() {
-      return name.hashCode();
-    }
-  }
-
   public static final String DEFAULT_REPOSITORY = "";
   public static final RepositoryName DEFAULT_REPOSITORY_NAME;
   public static final RepositoryName MAIN_REPOSITORY_NAME;
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
new file mode 100644
index 0000000..2aa253d
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
@@ -0,0 +1,220 @@
+// Copyright 2016 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.cmdline;
+
+import com.google.common.base.Throwables;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.devtools.build.lib.util.Pair;
+import com.google.devtools.build.lib.util.StringCanonicalizer;
+import com.google.devtools.build.lib.util.StringUtilities;
+import com.google.devtools.build.lib.vfs.PathFragment;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamException;
+import java.io.Serializable;
+import java.util.concurrent.ExecutionException;
+import java.util.regex.Pattern;
+
+/**
+ * A human-readable name for the repository.
+ */
+public final class RepositoryName implements Serializable {
+  private static final Pattern VALID_REPO_NAME = Pattern.compile("@[\\w\\-.]*");
+
+  /** Helper for serializing {@link RepositoryName}. */
+  private static final class SerializationProxy implements Serializable {
+    private RepositoryName repositoryName;
+
+    private SerializationProxy(RepositoryName repositoryName) {
+      this.repositoryName = repositoryName;
+    }
+
+    private void writeObject(ObjectOutputStream out) throws IOException {
+      out.writeObject(repositoryName.toString());
+    }
+
+    private void readObject(ObjectInputStream in)
+        throws IOException, ClassNotFoundException {
+      try {
+        repositoryName = RepositoryName.create((String) in.readObject());
+      } catch (LabelSyntaxException e) {
+        throw new IOException("Error serializing repository name: " + e.getMessage());
+      }
+    }
+
+    @SuppressWarnings("unused")
+    private void readObjectNoData() throws ObjectStreamException {
+    }
+
+    private Object readResolve() {
+      return repositoryName;
+    }
+  }
+
+  private void readObject(@SuppressWarnings("unused") ObjectInputStream in) throws IOException {
+    throw new IOException("Serialization is allowed only by proxy");
+  }
+
+  private Object writeReplace() {
+    return new SerializationProxy(this);
+  }
+
+  private static final LoadingCache<String, RepositoryName> repositoryNameCache =
+      CacheBuilder.newBuilder()
+        .weakValues()
+        .build(
+            new CacheLoader<String, RepositoryName>() {
+              @Override
+              public RepositoryName load(String name) throws LabelSyntaxException {
+                String errorMessage = validate(name);
+                if (errorMessage != null) {
+                  errorMessage = "invalid repository name '"
+                      + StringUtilities.sanitizeControlChars(name) + "': " + errorMessage;
+                  throw new LabelSyntaxException(errorMessage);
+                }
+                return new RepositoryName(StringCanonicalizer.intern(name));
+              }
+            });
+
+  /**
+   * Makes sure that name is a valid repository name and creates a new RepositoryName using it.
+   *
+   * @throws LabelSyntaxException if the name is invalid
+   */
+  public static RepositoryName create(String name) throws LabelSyntaxException {
+    try {
+      return repositoryNameCache.get(name);
+    } catch (ExecutionException e) {
+      Throwables.propagateIfInstanceOf(e.getCause(), LabelSyntaxException.class);
+      throw new IllegalStateException("Failed to create RepositoryName from " + name, e);
+    }
+  }
+
+  /**
+   * Extracts the repository name from a PathFragment that was created with
+   * {@code PackageIdentifier.getPathFragment}.
+   *
+   * @return a {@code Pair} of the extracted repository name and the path fragment with stripped
+   * of "external/"-prefix and repository name, or null if none was found or the repository name
+   * was invalid.
+   */
+  public static Pair<RepositoryName, PathFragment> fromPathFragment(PathFragment path) {
+    if (path.segmentCount() < 2 || !path.getSegment(0).equals(Label.EXTERNAL_PATH_PREFIX)) {
+      return null;
+    }
+    try {
+      RepositoryName repoName = RepositoryName.create("@" + path.getSegment(1));
+      PathFragment subPath = path.subFragment(2, path.segmentCount());
+      return Pair.of(repoName, subPath);
+    } catch (LabelSyntaxException e) {
+      return null;
+    }
+  }
+
+  private final String name;
+
+  private RepositoryName(String name) {
+    this.name = name;
+  }
+
+  /**
+   * Performs validity checking.  Returns null on success, an error message otherwise.
+   */
+  static String validate(String name) {
+    if (name.isEmpty()) {
+      return null;
+    }
+
+    // Some special cases for more user-friendly error messages.
+    if (!name.startsWith("@")) {
+      return "workspace names must start with '@'";
+    }
+    if (name.equals("@.")) {
+      return "workspace names are not allowed to be '@.'";
+    }
+    if (name.equals("@..")) {
+      return "workspace names are not allowed to be '@..'";
+    }
+
+    if (!VALID_REPO_NAME.matcher(name).matches()) {
+      return "workspace names may contain only A-Z, a-z, 0-9, '-', '_' and '.'";
+    }
+
+    return null;
+  }
+
+  /**
+   * Returns the repository name without the leading "{@literal @}".  For the default repository,
+   * returns "".
+   */
+  public String strippedName() {
+    if (name.isEmpty()) {
+      return name;
+    }
+    return name.substring(1);
+  }
+
+  /**
+   * Returns if this is the default repository, that is, {@link #name} is "".
+   */
+  public boolean isDefault() {
+    return name.isEmpty();
+  }
+
+  /**
+   * Returns the repository name, with leading "{@literal @}" (or "" for the default repository).
+   */
+  // TODO(bazel-team): Use this over toString()- easier to track its usage.
+  public String getName() {
+    return name;
+  }
+
+  /**
+   * Returns the path at which this repository is mapped within the exec root.
+   */
+  public PathFragment getPathFragment() {
+    return isDefault()
+        ? PathFragment.EMPTY_FRAGMENT
+        : new PathFragment(Label.EXTERNAL_PATH_PREFIX).getRelative(strippedName());
+  }
+
+  /**
+   * Returns the repository name, with leading "{@literal @}" (or "" for the default repository).
+   */
+  @Override
+  public String toString() {
+    return name;
+  }
+
+  @Override
+  public boolean equals(Object object) {
+    if (this == object) {
+      return true;
+    }
+    if (!(object instanceof RepositoryName)) {
+      return false;
+    }
+    return name.equals(((RepositoryName) object).name);
+  }
+
+  @Override
+  public int hashCode() {
+    return name.hashCode();
+  }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java b/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java
index 254be3c..5617c94 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java
@@ -21,7 +21,6 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.cmdline.LabelValidator.BadLabelException;
 import com.google.devtools.build.lib.cmdline.LabelValidator.PackageAndTarget;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
 import com.google.devtools.build.lib.util.BatchCallback;
 import com.google.devtools.build.lib.util.Preconditions;
 import com.google.devtools.build.lib.util.StringUtilities;
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/TargetPatternResolver.java b/src/main/java/com/google/devtools/build/lib/cmdline/TargetPatternResolver.java
index 6cf7ddc..05c914a 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/TargetPatternResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/TargetPatternResolver.java
@@ -15,7 +15,6 @@
 package com.google.devtools.build.lib.cmdline;
 
 import com.google.common.collect.ImmutableSet;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
 import com.google.devtools.build.lib.util.BatchCallback;
 import com.google.devtools.build.lib.vfs.PathFragment;
 
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/RecursivePackageProvider.java b/src/main/java/com/google/devtools/build/lib/pkgcache/RecursivePackageProvider.java
index 808085b..0daec5d 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/RecursivePackageProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/RecursivePackageProvider.java
@@ -15,7 +15,7 @@
 
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.packages.NoSuchPackageException;
 import com.google.devtools.build.lib.packages.Package;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
index 2d8ecd3..903fc63 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
@@ -16,7 +16,7 @@
 
 import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.packages.Rule;
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 48a8eb4..6979a42 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
@@ -19,7 +19,7 @@
 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.cmdline.RepositoryName;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
 import com.google.devtools.build.lib.packages.AggregatingAttributeMapper;
 import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryFunction.java
index bfa8c1c..21d4eb2 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryFunction.java
@@ -17,7 +17,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.packages.Package;
 import com.google.devtools.build.lib.skyframe.RecursivePkgValue.RecursivePkgKey;
 import com.google.devtools.build.lib.vfs.PathFragment;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryValue.java
index 3d0b5b6..f015509 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryValue.java
@@ -16,7 +16,7 @@
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
 import com.google.devtools.build.lib.skyframe.RecursivePkgValue.RecursivePkgKey;
 import com.google.devtools.build.lib.vfs.PathFragment;
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 db6639d..a388389 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
@@ -18,7 +18,7 @@
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.EventHandler;
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 c099dcb..f5c3ada 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
@@ -24,7 +24,7 @@
 import com.google.common.collect.Sets.SetView;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.cmdline.TargetPattern;
 import com.google.devtools.build.lib.cmdline.TargetPattern.Type;
 import com.google.devtools.build.lib.events.Event;
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 a2e3910..f98a01d 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
@@ -17,7 +17,7 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.cmdline.ResolvedTargets;
 import com.google.devtools.build.lib.cmdline.TargetParsingException;
 import com.google.devtools.build.lib.cmdline.TargetPattern;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryFunction.java
index ac8801c..b5b560a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryFunction.java
@@ -16,7 +16,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.cmdline.ResolvedTargets;
 import com.google.devtools.build.lib.packages.NoSuchPackageException;
 import com.google.devtools.build.lib.packages.NoSuchTargetException;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryValue.java
index 9b726c3..136a94b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryValue.java
@@ -15,7 +15,7 @@
 
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableSet;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
 import com.google.devtools.build.lib.pkgcache.FilteringPolicies;
 import com.google.devtools.build.lib.pkgcache.FilteringPolicy;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
index 9746831..ce9a912 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
@@ -18,7 +18,7 @@
 import com.google.common.collect.Sets;
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.events.Event;
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.packages.NoSuchPackageException;
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 5764b6c..b24ee7a 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
@@ -21,7 +21,7 @@
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.cmdline.ResolvedTargets;
 import com.google.devtools.build.lib.cmdline.TargetParsingException;
 import com.google.devtools.build.lib.cmdline.TargetPatternResolver;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgFunction.java
index dbbbe8c..a701802 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgFunction.java
@@ -15,7 +15,7 @@
 
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.collect.nestedset.Order;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java
index 019de51..8919578 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java
@@ -14,7 +14,7 @@
 package com.google.devtools.build.lib.skyframe;
 
 import com.google.common.collect.ImmutableSet;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.collect.nestedset.Order;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryValue.java
index 4aea6ea..e647b81 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryValue.java
@@ -15,7 +15,7 @@
 package com.google.devtools.build.lib.skyframe;
 
 import com.google.common.base.Objects;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
+import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.skyframe.SkyKey;
 import com.google.devtools.build.skyframe.SkyValue;
