Thread the repository name all the way from TargetPatternResolver to RecursivePkgFunction.

This introduces some redundancy with RootedPath, but only in the case of remote repositories. There doesn't seem to be a good way of removing this redundancy.

--
MOS_MIGRATED_REVID=103621610
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 54fd932..b127009 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
@@ -423,7 +423,8 @@
     public <T> ResolvedTargets<T> eval(TargetPatternResolver<T> resolver,
         ImmutableSet<String> excludedSubdirectories)
         throws TargetParsingException, InterruptedException {
-      return resolver.findTargetsBeneathDirectory(getOriginalPattern(), directory, rulesOnly,
+      return resolver.findTargetsBeneathDirectory(
+          PackageIdentifier.DEFAULT_REPOSITORY_NAME, getOriginalPattern(), directory, rulesOnly,
           excludedSubdirectories);
     }
 
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 3566b23..4234ad5 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,6 +15,7 @@
 package com.google.devtools.build.lib.cmdline;
 
 import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
 
 /**
  * A callback interface that is used during the process of converting target patterns (such as
@@ -76,8 +77,8 @@
    *    to ignore
    * @throws TargetParsingException under implementation-specific failure conditions
    */
-  ResolvedTargets<T> findTargetsBeneathDirectory(String originalPattern, String directory,
-      boolean rulesOnly, ImmutableSet<String> excludedSubdirectories)
+  ResolvedTargets<T> findTargetsBeneathDirectory(RepositoryName repository, String originalPattern,
+      String directory, boolean rulesOnly, ImmutableSet<String> excludedSubdirectories)
       throws TargetParsingException, InterruptedException;
 
   /**
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 e5608a6..de79d9d 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
@@ -14,6 +14,7 @@
 package com.google.devtools.build.lib.pkgcache;
 
 import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.lib.vfs.RootedPath;
 
@@ -28,6 +29,6 @@
    * @param excludedSubdirectories a set of {@link PathFragment}s, all of which are beneath
    *     {@code directory}, specifying transitive subdirectories to exclude
    */
-  Iterable<PathFragment> getPackagesUnderDirectory(RootedPath directory,
+  Iterable<PathFragment> getPackagesUnderDirectory(RepositoryName repository, RootedPath directory,
       ImmutableSet<PathFragment> excludedSubdirectories);
 }
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 de739ac..7ea637d 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,6 +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.events.Event;
 import com.google.devtools.build.lib.events.EventHandler;
 import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException;
@@ -89,13 +90,14 @@
   }
 
   @Override
-  public Iterable<PathFragment> getPackagesUnderDirectory(RootedPath directory,
+  public Iterable<PathFragment> getPackagesUnderDirectory(
+      RepositoryName repository, RootedPath directory,
       ImmutableSet<PathFragment> excludedSubdirectories)
       throws MissingDepException {
     PathFragment rootedPathFragment = directory.getRelativePath();
     PathFragment.checkAllPathsAreUnder(excludedSubdirectories, rootedPathFragment);
     RecursivePkgValue lookup = (RecursivePkgValue) env.getValue(
-        RecursivePkgValue.key(directory, excludedSubdirectories));
+        RecursivePkgValue.key(repository, directory, excludedSubdirectories));
     if (lookup == null) {
       // Typically a null value from Environment.getValue(k) means that either the key k is missing
       // a dependency or an exception was thrown during evaluation of k. Here, if this getValue
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 5c1cc7d..2d1b1de 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
@@ -19,6 +19,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.TargetPattern;
 import com.google.devtools.build.lib.cmdline.TargetPattern.Type;
 import com.google.devtools.build.lib.events.Event;
@@ -98,7 +99,8 @@
   }
 
   @Override
-  public Iterable<PathFragment> getPackagesUnderDirectory(RootedPath directory,
+  public Iterable<PathFragment> getPackagesUnderDirectory(
+      RepositoryName repository, RootedPath directory,
       ImmutableSet<PathFragment> excludedSubdirectories) {
     PathFragment.checkAllPathsAreUnder(excludedSubdirectories, directory.getRelativePath());
 
@@ -120,16 +122,17 @@
     // directory wasn't in the universe, so return an empty list.
     ImmutableList.Builder<PathFragment> builder = ImmutableList.builder();
     if (filteringPolicy != null) {
-      collectPackagesUnder(directory, excludedSubdirectories, builder, filteringPolicy);
+      collectPackagesUnder(repository, directory, excludedSubdirectories, builder, filteringPolicy);
     }
     return builder.build();
   }
 
-  private void collectPackagesUnder(RootedPath directory,
+  private void collectPackagesUnder(RepositoryName repository, RootedPath directory,
       ImmutableSet<PathFragment> excludedSubdirectories,
       ImmutableList.Builder<PathFragment> builder, FilteringPolicy policy) {
     SkyKey key =
-        PrepareDepsOfTargetsUnderDirectoryValue.key(directory, excludedSubdirectories, policy);
+        PrepareDepsOfTargetsUnderDirectoryValue.key(
+            repository, directory, excludedSubdirectories, policy);
     // If the key does not exist in the graph, because the SkyQuery environment has
     // already loaded the universe, and we found a TargetsBelowDirectory pattern in the universe
     // that contained it, then we know the directory does not exist in the universe.
@@ -151,8 +154,8 @@
         PathFragment subdirectoryRelativePath = subdirectory.getRelativePath();
         ImmutableSet<PathFragment> excludedSubdirectoriesBeneathThisSubdirectory =
             PathFragment.filterPathsStartingWith(excludedSubdirectories, subdirectoryRelativePath);
-        collectPackagesUnder(subdirectory, excludedSubdirectoriesBeneathThisSubdirectory, builder,
-            policy);
+        collectPackagesUnder(repository, subdirectory,
+            excludedSubdirectoriesBeneathThisSubdirectory, builder, policy);
       }
     }
   }
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 c769738..b116595 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
@@ -18,6 +18,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.ResolvedTargets;
 import com.google.devtools.build.lib.cmdline.TargetParsingException;
 import com.google.devtools.build.lib.cmdline.TargetPattern;
@@ -210,18 +211,21 @@
     }
 
     @Override
-    public ResolvedTargets<Void> findTargetsBeneathDirectory(String originalPattern,
-        String directory, boolean rulesOnly, ImmutableSet<String> excludedSubdirectories)
+    public ResolvedTargets<Void> findTargetsBeneathDirectory(RepositoryName repository,
+        String originalPattern, String directory, boolean rulesOnly,
+        ImmutableSet<String> excludedSubdirectories)
         throws TargetParsingException, InterruptedException {
       FilteringPolicy policy =
           rulesOnly ? FilteringPolicies.RULES_ONLY : FilteringPolicies.NO_FILTER;
       ImmutableSet<PathFragment> excludedPathFragments =
           TargetPatternResolverUtil.getPathFragments(excludedSubdirectories);
       PathFragment pathFragment = TargetPatternResolverUtil.getPathFragment(directory);
+      // TODO(bazel-team): This is where we need to depend on the RepositoryValue of a remote
+      // repository in order figure out its root and thus support recursive package search in them.
       for (Path root : pkgPath.getPathEntries()) {
         RootedPath rootedPath = RootedPath.toRootedPath(root, pathFragment);
-        SkyValue token = env.getValue(PrepareDepsOfTargetsUnderDirectoryValue.key(rootedPath,
-            excludedPathFragments, policy));
+        SkyValue token = env.getValue(PrepareDepsOfTargetsUnderDirectoryValue.key(
+            repository, rootedPath, excludedPathFragments, policy));
         if (token == null) {
           // A null token value means there is a missing dependency, because RecursivePkgFunction
           // never throws.
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 97d5ab0..42af44c 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
@@ -18,6 +18,7 @@
 import com.google.common.collect.ImmutableList;
 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.ResolvedTargets;
 import com.google.devtools.build.lib.packages.NoSuchPackageException;
 import com.google.devtools.build.lib.packages.NoSuchTargetException;
@@ -78,9 +79,9 @@
     }
 
     @Override
-    protected SkyKey getSkyKeyForSubdirectory(RootedPath subdirectory,
+    protected SkyKey getSkyKeyForSubdirectory(RepositoryName repository, RootedPath subdirectory,
         ImmutableSet<PathFragment> excludedSubdirectoriesBeneathSubdirectory) {
-      return PrepareDepsOfTargetsUnderDirectoryValue.key(subdirectory,
+      return PrepareDepsOfTargetsUnderDirectoryValue.key(repository, subdirectory,
           excludedSubdirectoriesBeneathSubdirectory, filteringPolicy);
     }
 
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 7416fb7..11291a5 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
@@ -17,6 +17,7 @@
 import com.google.common.base.Preconditions;
 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.concurrent.ThreadSafety.ThreadSafe;
 import com.google.devtools.build.lib.pkgcache.FilteringPolicies;
 import com.google.devtools.build.lib.pkgcache.FilteringPolicy;
@@ -96,8 +97,9 @@
 
   /** Create a prepare deps of targets under directory request. */
   @ThreadSafe
-  public static SkyKey key(RootedPath rootedPath, ImmutableSet<PathFragment> excludedPaths) {
-    return key(rootedPath, excludedPaths, FilteringPolicies.NO_FILTER);
+  public static SkyKey key(RepositoryName repository, RootedPath rootedPath,
+      ImmutableSet<PathFragment> excludedPaths) {
+    return key(repository, rootedPath, excludedPaths, FilteringPolicies.NO_FILTER);
   }
 
   /**
@@ -105,10 +107,11 @@
    * targets.
    */
   @ThreadSafe
-  public static SkyKey key(RootedPath rootedPath, ImmutableSet<PathFragment> excludedPaths,
-      FilteringPolicy filteringPolicy) {
+  public static SkyKey key(RepositoryName repository, RootedPath rootedPath,
+      ImmutableSet<PathFragment> excludedPaths, FilteringPolicy filteringPolicy) {
     return new SkyKey(SkyFunctions.PREPARE_DEPS_OF_TARGETS_UNDER_DIRECTORY,
-        new PrepareDepsOfTargetsUnderDirectoryKey(new RecursivePkgKey(rootedPath, excludedPaths),
+        new PrepareDepsOfTargetsUnderDirectoryKey(
+            new RecursivePkgKey(repository, rootedPath, excludedPaths),
             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 d0c7633..f376a86 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
@@ -16,6 +16,7 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
+import com.google.devtools.build.lib.cmdline.PackageIdentifier.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;
@@ -64,7 +65,8 @@
    * {@code excludedSubdirectoriesBeneathSubdirectory}, all of which must be proper subdirectories
    * of {@code subdirectory}.
    */
-  protected abstract SkyKey getSkyKeyForSubdirectory(RootedPath subdirectory,
+  protected abstract SkyKey getSkyKeyForSubdirectory(
+      RepositoryName repository, RootedPath subdirectory,
       ImmutableSet<PathFragment> excludedSubdirectoriesBeneathSubdirectory);
 
   /**
@@ -134,8 +136,8 @@
       return getEmptyReturn();
     }
 
-    PackageIdentifier packageId =
-        PackageIdentifier.createInDefaultRepo(rootRelativePath.getPathString());
+    PackageIdentifier packageId = new PackageIdentifier(
+        recursivePkgKey.getRepository(), rootRelativePath);
     PackageLookupValue pkgLookupValue;
     try {
       pkgLookupValue = (PackageLookupValue) env.getValueOrThrow(PackageLookupValue.key(packageId),
@@ -248,8 +250,8 @@
       ImmutableSet<PathFragment> excludedSubdirectoriesBeneathThisSubdirectory =
           PathFragment.filterPathsStartingWith(excludedPaths, subdirectory);
       RootedPath subdirectoryRootedPath = RootedPath.toRootedPath(root, subdirectory);
-      childDeps.add(getSkyKeyForSubdirectory(subdirectoryRootedPath,
-          excludedSubdirectoriesBeneathThisSubdirectory));
+      childDeps.add(getSkyKeyForSubdirectory(recursivePkgKey.getRepository(),
+          subdirectoryRootedPath, excludedSubdirectoriesBeneathThisSubdirectory));
       if (env.valuesMissing()) {
         return null;
       }
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 5fe2fae..69cf3ba 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
@@ -17,6 +17,7 @@
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
+import com.google.devtools.build.lib.cmdline.PackageIdentifier.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;
@@ -136,8 +137,9 @@
   }
 
   @Override
-  public ResolvedTargets<Target> findTargetsBeneathDirectory(String originalPattern,
-      String directory, boolean rulesOnly, ImmutableSet<String> excludedSubdirectories)
+  public ResolvedTargets<Target> findTargetsBeneathDirectory(RepositoryName repository,
+      String originalPattern, String directory, boolean rulesOnly,
+      ImmutableSet<String> excludedSubdirectories)
       throws TargetParsingException, InterruptedException {
     FilteringPolicy actualPolicy = rulesOnly
         ? FilteringPolicies.and(FilteringPolicies.RULES_ONLY, policy)
@@ -146,10 +148,13 @@
         TargetPatternResolverUtil.getPathFragments(excludedSubdirectories);
     PathFragment pathFragment = TargetPatternResolverUtil.getPathFragment(directory);
     ResolvedTargets.Builder<Target> targetBuilder = ResolvedTargets.builder();
+    // TODO(bazel-team): This is where we need to depend on the RepositoryValue of a remote
+    // repository in order figure out its root and thus support recursive package search in them.
     for (Path root : pkgPath.getPathEntries()) {
       RootedPath rootedPath = RootedPath.toRootedPath(root, pathFragment);
       Iterable<PathFragment> packagesUnderDirectory =
-          recursivePackageProvider.getPackagesUnderDirectory(rootedPath, excludedPathFragments);
+          recursivePackageProvider.getPackagesUnderDirectory(
+              repository, rootedPath, excludedPathFragments);
       for (PathFragment pkg : packagesUnderDirectory) {
         targetBuilder.merge(getTargetsInPackage(originalPattern, pkg, FilteringPolicies.NO_FILTER));
       }
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 0ca49fb..fc563dc 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
@@ -14,6 +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.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.collect.nestedset.Order;
@@ -57,9 +58,10 @@
     }
 
     @Override
-    protected SkyKey getSkyKeyForSubdirectory(RootedPath subdirectory,
+    protected SkyKey getSkyKeyForSubdirectory(RepositoryName repository, RootedPath subdirectory,
         ImmutableSet<PathFragment> excludedSubdirectoriesBeneathSubdirectory) {
-      return RecursivePkgValue.key(subdirectory, excludedSubdirectoriesBeneathSubdirectory);
+      return RecursivePkgValue.key(
+          repository, subdirectory, excludedSubdirectoriesBeneathSubdirectory);
     }
 
     @Override
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 04a5367..45df262 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
@@ -15,6 +15,7 @@
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.cmdline.PackageIdentifier.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;
@@ -55,8 +56,10 @@
    * Create a transitive package lookup request.
    */
   @ThreadSafe
-  public static SkyKey key(RootedPath rootedPath, ImmutableSet<PathFragment> excludedPaths) {
-    return new SkyKey(SkyFunctions.RECURSIVE_PKG, new RecursivePkgKey(rootedPath, excludedPaths));
+  public static SkyKey key(RepositoryName repositoryName, RootedPath rootedPath,
+      ImmutableSet<PathFragment> excludedPaths) {
+    return new SkyKey(SkyFunctions.RECURSIVE_PKG,
+        new RecursivePkgKey(repositoryName, rootedPath, excludedPaths));
   }
 
   public NestedSet<String> getPackages() {
@@ -74,16 +77,23 @@
    */
   @ThreadSafe
   public static final class RecursivePkgKey implements Serializable {
+    private final RepositoryName repositoryName;
     private final RootedPath rootedPath;
     private final ImmutableSet<PathFragment> excludedPaths;
 
-    public RecursivePkgKey(RootedPath rootedPath, ImmutableSet<PathFragment> excludedPaths) {
+    public RecursivePkgKey(RepositoryName repositoryName, RootedPath rootedPath,
+        ImmutableSet<PathFragment> excludedPaths) {
       PathFragment.checkAllPathsAreUnder(excludedPaths,
           rootedPath.getRelativePath());
+      this.repositoryName = repositoryName;
       this.rootedPath = Preconditions.checkNotNull(rootedPath);
       this.excludedPaths = Preconditions.checkNotNull(excludedPaths);
     }
 
+    public RepositoryName getRepository() {
+      return repositoryName;
+    }
+
     public RootedPath getRootedPath() {
       return rootedPath;
     }