Rename PackageCacheOptions to PackageCache.
PackageCache refers to a historical implementation of Bazel, predating
Skyframe. Rename the options and fix names referring to the PackageCache.
RELNOTES: None.
PiperOrigin-RevId: 306265392
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/PackageOptions.java b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageOptions.java
new file mode 100644
index 0000000..a233964
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageOptions.java
@@ -0,0 +1,210 @@
+// Copyright 2014 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.pkgcache;
+
+
+import com.google.common.base.Splitter;
+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;
+import com.google.devtools.common.options.OptionDocumentationCategory;
+import com.google.devtools.common.options.OptionEffectTag;
+import com.google.devtools.common.options.OptionsBase;
+import com.google.devtools.common.options.OptionsParsingException;
+import java.util.List;
+
+/** Options for configuring Packages -- loading and default behaviors. */
+public class PackageOptions extends OptionsBase {
+
+ /**
+ * Converter for the {@code --default_visibility} option.
+ */
+ public static class DefaultVisibilityConverter implements Converter<RuleVisibility> {
+ @Override
+ public RuleVisibility convert(String input) throws OptionsParsingException {
+ if (input.equals("public")) {
+ return ConstantRuleVisibility.PUBLIC;
+ } else if (input.equals("private")) {
+ return ConstantRuleVisibility.PRIVATE;
+ } else {
+ throw new OptionsParsingException("Not a valid default visibility: '" + input
+ + "' (should be 'public' or 'private'");
+ }
+ }
+
+ @Override
+ public String getTypeDescription() {
+ return "default visibility";
+ }
+ }
+
+ /** 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%",
+ converter = Converters.ColonSeparatedOptionListConverter.class,
+ documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ help =
+ "A colon-separated list of where to look for packages. "
+ + "Elements beginning with '%workspace%' are relative to the enclosing "
+ + "workspace. If omitted or empty, the default is the output of "
+ + "'bazel info default-package-path'.")
+ public List<String> packagePath;
+
+ @Option(
+ name = "show_loading_progress",
+ defaultValue = "true",
+ documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ help = "If enabled, causes Bazel to print \"Loading package:\" messages.")
+ public boolean showLoadingProgress;
+
+ @Option(
+ name = "deleted_packages",
+ defaultValue = "",
+ converter = CommaSeparatedPackageNameListConverter.class,
+ documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ help =
+ "A comma-separated list of names of packages which the "
+ + "build system will consider non-existent, even if they are "
+ + "visible somewhere on the package path.\n"
+ + "Use this option when deleting a subpackage 'x/y' of an "
+ + "existing package 'x'. For example, after deleting x/y/BUILD "
+ + "in your client, the build system may complain if it "
+ + "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;
+
+ @Option(
+ name = "default_visibility",
+ defaultValue = "private",
+ converter = DefaultVisibilityConverter.class,
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ help =
+ "Default visibility for packages that don't set it explicitly ('public' or " + "'private')."
+ )
+ public RuleVisibility defaultVisibility;
+
+ @Option(
+ 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(
+ name = "experimental_max_directories_to_eagerly_visit_in_globbing",
+ defaultValue = "-1",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ help =
+ "If non-negative, the first time a glob is evaluated in a package, the subdirectories of "
+ + "the package will be traversed in order to warm filesystem caches and compensate for "
+ + "lack of parallelism in globbing. At most this many directories will be visited."
+ )
+ public int maxDirectoriesToEagerlyVisitInGlobbing;
+
+ @Option(
+ name = "fetch",
+ defaultValue = "true",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ help = "Allows the command to fetch external dependencies"
+ )
+ public boolean fetch;
+
+ @Option(
+ name = "experimental_check_output_files",
+ defaultValue = "true",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ help =
+ "Check for modifications made to the output files of a build. Consider setting "
+ + "this flag to false to see the effect on incremental build times."
+ )
+ public boolean checkOutputFiles;
+
+ /**
+ * A converter from strings containing comma-separated names of packages to lists of strings.
+ */
+ public static class CommaSeparatedPackageNameListConverter
+ implements Converter<List<PackageIdentifier>> {
+
+ private static final Splitter COMMA_SPLITTER = Splitter.on(',');
+
+ @Override
+ public List<PackageIdentifier> convert(String input) throws OptionsParsingException {
+ if (Strings.isNullOrEmpty(input)) {
+ return ImmutableList.of();
+ }
+ ImmutableList.Builder<PackageIdentifier> list = ImmutableList.builder();
+ for (String s : COMMA_SPLITTER.split(input)) {
+ try {
+ list.add(PackageIdentifier.parse(s));
+ } catch (LabelSyntaxException e) {
+ throw new OptionsParsingException(e.getMessage());
+ }
+ }
+ return list.build();
+ }
+
+ @Override
+ public String getTypeDescription() {
+ return "comma-separated list of package names";
+ }
+
+ }
+
+ public ImmutableSet<PackageIdentifier> getDeletedPackages() {
+ if (deletedPackages == null || deletedPackages.isEmpty()) {
+ return ImmutableSet.of();
+ }
+ ImmutableSet.Builder<PackageIdentifier> newDeletedPackages = ImmutableSet.builder();
+ for (PackageIdentifier pkg : deletedPackages) {
+ newDeletedPackages.add(pkg.makeAbsolute());
+ }
+ return newDeletedPackages.build();
+ }
+}