Use the ResourcesConverter for --legacy_globbing_threads.

This allows specifying this value relative to HOST_CPUS and also as an
"auto" value that uses the number of CPUs.

RELNOTES: None.
PiperOrigin-RevId: 303812017
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/BUILD b/src/main/java/com/google/devtools/build/lib/pkgcache/BUILD
index 19e1905..eefadb6 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/BUILD
@@ -17,6 +17,8 @@
     srcs = glob(["*.java"]),
     deps = [
         "//src/main/java/com/google/devtools/build/lib:events",
+        "//src/main/java/com/google/devtools/build/lib:resource-converter",
+        "//src/main/java/com/google/devtools/build/lib/actions:localhost_capacity",
         "//src/main/java/com/google/devtools/build/lib/buildeventstream",
         "//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:build_event_stream_java_proto",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
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 a078933..2f86dc0 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
@@ -19,10 +19,12 @@
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.actions.LocalHostCapacity;
 import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
 import com.google.devtools.build.lib.packages.ConstantRuleVisibility;
 import com.google.devtools.build.lib.packages.RuleVisibility;
+import com.google.devtools.build.lib.util.ResourceConverter;
 import com.google.devtools.common.options.Converter;
 import com.google.devtools.common.options.Converters;
 import com.google.devtools.common.options.Option;
@@ -59,6 +61,17 @@
     }
   }
 
+  /** Converter for globbing threads. */
+  public static class ParallelismConverter extends ResourceConverter {
+    public ParallelismConverter() throws OptionsParsingException {
+      super(
+          /* autoSupplier= */ () ->
+              (int) Math.ceil(LocalHostCapacity.getLocalHostCapacity().getCpuUsage()),
+          /* minValue= */ 1,
+          /* maxValue= */ Integer.MAX_VALUE);
+    }
+  }
+
   @Option(
       name = "package_path",
       defaultValue = "%workspace%",
@@ -111,12 +124,16 @@
   public RuleVisibility defaultVisibility;
 
   @Option(
-    name = "legacy_globbing_threads",
-    defaultValue = "100",
-    documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
-    effectTags = {OptionEffectTag.UNKNOWN},
-    help = "Number of threads to use for glob evaluation."
-  )
+      name = "legacy_globbing_threads",
+      defaultValue = "100",
+      converter = ParallelismConverter.class,
+      documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+      effectTags = {OptionEffectTag.UNKNOWN},
+      help =
+          "Number of threads to use for glob evaluation. Takes "
+              + ResourceConverter.FLAG_SYNTAX
+              + ". \"auto\" means to use a reasonable value derived from the machine's hardware"
+              + " profile (e.g. the number of processors).")
   public int globbingThreads;
 
   @Option(
diff --git a/src/test/shell/integration/execution_phase_tests.sh b/src/test/shell/integration/execution_phase_tests.sh
index 279d327..f787067 100755
--- a/src/test/shell/integration/execution_phase_tests.sh
+++ b/src/test/shell/integration/execution_phase_tests.sh
@@ -376,6 +376,7 @@
   bazel build --nobuild \
       --experimental_sandbox_async_tree_delete_idle_threads="${threads}" \
       --jobs="${threads}" \
+      --legacy_globbing_threads="${threads}" \
       --loading_phase_threads="${threads}" \
       --local_cpu_resources="${threads}" \
       --local_ram_resources="${ram}" \