diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java
index 5d97969..85e4556 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java
@@ -365,8 +365,8 @@
     return options.strictFilesetOutput;
   }
 
-  public RepositoryName getMainRepositoryName() {
-    return mainRepositoryName;
+  public String getMainRepositoryName() {
+    return mainRepositoryName.strippedName();
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/OutputDirectories.java b/src/main/java/com/google/devtools/build/lib/analysis/config/OutputDirectories.java
index 899c39e..a7ba052 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/OutputDirectories.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/OutputDirectories.java
@@ -14,7 +14,6 @@
 
 package com.google.devtools.build.lib.analysis.config;
 
-import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Predicates.not;
 import static java.util.stream.Collectors.joining;
 
@@ -89,22 +88,6 @@
     INCLUDE(BlazeDirectories.RELATIVE_INCLUDE_DIR),
     OUTPUT("");
 
-    /**
-     * Returns the {@link OutputDirectory} matching the given name.
-     *
-     * <p>Throws {@link IllegalArgumentException} if the given name does not match any directory in
-     * the output tree.
-     */
-    public static OutputDirectory forName(String name) {
-      checkNotNull(name);
-      for (OutputDirectory directory : values()) {
-        if (directory.name.equals(name)) {
-          return directory;
-        }
-      }
-      throw new IllegalArgumentException(name);
-    }
-
     private final String name;
 
     OutputDirectory(String name) {
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/info/ExecutionRootInfoItem.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/info/ExecutionRootInfoItem.java
index 11a2c45..2d34190 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/info/ExecutionRootInfoItem.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/info/ExecutionRootInfoItem.java
@@ -35,7 +35,6 @@
       Supplier<BuildConfigurationValue> configurationSupplier, CommandEnvironment env) {
     checkNotNull(env);
     return print(
-        env.getDirectories()
-            .getExecRoot(configurationSupplier.get().getMainRepositoryName().strippedName()));
+        env.getDirectories().getExecRoot(configurationSupplier.get().getMainRepositoryName()));
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/info/OutputPathInfoItem.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/info/OutputPathInfoItem.java
index b426137..d3577ba 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/info/OutputPathInfoItem.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/info/OutputPathInfoItem.java
@@ -32,7 +32,6 @@
       Supplier<BuildConfigurationValue> configurationSupplier, CommandEnvironment env) {
     checkNotNull(env);
     return print(
-        env.getDirectories()
-            .getOutputPath(configurationSupplier.get().getMainRepositoryName().strippedName()));
+        env.getDirectories().getOutputPath(configurationSupplier.get().getMainRepositoryName()));
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValueTest.java b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValueTest.java
index 3524a31..9334314 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValueTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValueTest.java
@@ -47,10 +47,7 @@
 
     BuildConfigurationValue config = create("--cpu=piii");
     String outputDirPrefix =
-        outputBase
-            + "/execroot/"
-            + config.getMainRepositoryName().strippedName()
-            + "/blaze-out/.*piii-fastbuild";
+        outputBase + "/execroot/" + config.getMainRepositoryName() + "/blaze-out/.*piii-fastbuild";
 
     assertThat(config.getOutputDirectory(RepositoryName.MAIN).getRoot().toString())
         .matches(outputDirPrefix);
@@ -73,7 +70,7 @@
         .matches(
             outputBase
                 + "/execroot/"
-                + config.getMainRepositoryName().strippedName()
+                + config.getMainRepositoryName()
                 + "/blaze-out/.*k8-fastbuild-test");
   }
 
