Remove support for managed directories. Fixes #15463. The design doc for the deprecation and the removal is available here: https://docs.google.com/document/d/1u9V5RUc7i6Urh8gGfnSurxpWA7JMRtwCi1Pr5BHeE44/edit RELNOTES: --noincompatible_disable_managed_directories, and with that, workspace(managed_directories=) is not supported anymore. PiperOrigin-RevId: 456228902 Change-Id: I5fcbf96b9a508f47cbcabf9715163cd7120020bf
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/BUILD index 04c4235..0e9a318 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/BUILD +++ b/src/main/java/com/google/devtools/build/lib/bazel/BUILD
@@ -42,7 +42,6 @@ "//src/main/java/com/google/devtools/build/lib/events", "//src/main/java/com/google/devtools/build/lib/pkgcache", "//src/main/java/com/google/devtools/build/lib/rules:repository/local_repository_rule", - "//src/main/java/com/google/devtools/build/lib/rules:repository/managed_directories_knowledge_impl", "//src/main/java/com/google/devtools/build/lib/rules:repository/new_local_repository_function", "//src/main/java/com/google/devtools/build/lib/rules:repository/new_local_repository_rule", "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_function",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java index 8bf9411..cc7aae9 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java
@@ -61,8 +61,6 @@ import com.google.devtools.build.lib.pkgcache.PackageOptions; import com.google.devtools.build.lib.rules.repository.LocalRepositoryFunction; import com.google.devtools.build.lib.rules.repository.LocalRepositoryRule; -import com.google.devtools.build.lib.rules.repository.ManagedDirectoriesKnowledgeImpl; -import com.google.devtools.build.lib.rules.repository.ManagedDirectoriesKnowledgeImpl.ManagedDirectoriesListener; import com.google.devtools.build.lib.rules.repository.NewLocalRepositoryFunction; import com.google.devtools.build.lib.rules.repository.NewLocalRepositoryRule; import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction; @@ -134,9 +132,6 @@ private Set<String> outputVerificationRules = ImmutableSet.of(); private FileSystem filesystem; private List<String> registries; - // We hold the precomputed value of the managed directories here, so that the dependency - // on WorkspaceFileValue is not registered for each FileStateValue. - private final ManagedDirectoriesKnowledgeImpl managedDirectoriesKnowledge; private final AtomicBoolean enableBzlmod = new AtomicBoolean(false); private final AtomicBoolean ignoreDevDeps = new AtomicBoolean(false); private CheckDirectDepsMode checkDirectDepsMode = CheckDirectDepsMode.WARNING; @@ -145,24 +140,6 @@ public BazelRepositoryModule() { this.starlarkRepositoryFunction = new StarlarkRepositoryFunction(downloadManager); this.repositoryHandlers = repositoryRules(); - ManagedDirectoriesListener listener = - repositoryNamesWithManagedDirs -> { - Set<String> conflicting = - overrides.keySet().stream() - .filter(repositoryNamesWithManagedDirs::contains) - .map(RepositoryName::getNameWithAt) - .collect(Collectors.toSet()); - if (!conflicting.isEmpty()) { - String message = - "Overriding repositories is not allowed" - + " for the repositories with managed directories.\n" - + "The following overridden external repositories have managed directories: " - + String.join(", ", conflicting.toArray(new String[0])); - throw new AbruptExitException( - detailedExitCode(message, Code.OVERRIDE_DISALLOWED_MANAGED_DIRECTORIES)); - } - }; - managedDirectoriesKnowledge = new ManagedDirectoriesKnowledgeImpl(listener); } private static DetailedExitCode detailedExitCode(String message, ExternalRepository.Code code) { @@ -214,9 +191,7 @@ if ("bazel".equals(runtime.getProductName())) { builder.setSkyframeExecutorRepositoryHelpersHolder( SkyframeExecutorRepositoryHelpersHolder.create( - managedDirectoriesKnowledge, - new RepositoryDirectoryDirtinessChecker( - directories.getWorkspace(), managedDirectoriesKnowledge))); + new RepositoryDirectoryDirtinessChecker())); } // Create the repository function everything flows through. @@ -227,7 +202,6 @@ isFetch, clientEnvironmentSupplier, directories, - managedDirectoriesKnowledge, BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER); RegistryFactory registryFactory = new RegistryFactoryImpl(new HttpDownloader(), clientEnvironmentSupplier);
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java index a523f00..6b80558 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
@@ -515,6 +515,14 @@ effectTags = {OptionEffectTag.NO_OP}, help = "No-op") public boolean keepConfigNodes; + + @Option( + name = "incompatible_disable_managed_directories", + defaultValue = "false", + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = {OptionEffectTag.NO_OP}, + help = "No-op") + public boolean incompatibleDisableManagedDirectories; } @Override
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java index 3b69ca0..b041955 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java +++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
@@ -17,7 +17,6 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; -import com.google.devtools.build.lib.cmdline.RepositoryName; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.NullEventHandler; import com.google.devtools.build.lib.events.StoredEventHandler; @@ -26,7 +25,6 @@ import com.google.devtools.build.lib.server.FailureDetails; import com.google.devtools.build.lib.server.FailureDetails.PackageLoading; import com.google.devtools.build.lib.vfs.Path; -import com.google.devtools.build.lib.vfs.PathFragment; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -398,8 +396,4 @@ public Map<String, Object> getVariableBindings() { return ImmutableMap.copyOf(bindings); } - - public Map<PathFragment, RepositoryName> getManagedDirectories() { - return workspaceGlobals.getManagedDirectories(); - } }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java index 8f15a74..8f972a54 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java +++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
@@ -21,7 +21,6 @@ import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; -import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.vfs.RootedPath; import com.google.devtools.build.skyframe.SkyFunctionName; import com.google.devtools.build.skyframe.SkyKey; @@ -104,9 +103,6 @@ private final ImmutableMap<String, Integer> loadToChunkMap; private final ImmutableMap<RepositoryName, ImmutableMap<String, RepositoryName>> repositoryMapping; - // Mapping of the relative paths of the incrementally updated managed directories - // to the managing external repositories - private final ImmutableMap<PathFragment, RepositoryName> managedDirectories; /** * Create a WorkspaceFileValue containing the various values necessary to compute the split @@ -124,7 +120,6 @@ * @param idx The index of this part of the split WORKSPACE file (0 for the first one, 1 for the * second one and so on). * @param hasNext Is there a next part in the WORKSPACE file or this part the last one? - * @param managedDirectories Mapping of the relative paths of the incrementally updated managed */ public WorkspaceFileValue( Package pkg, @@ -133,8 +128,7 @@ Map<String, Object> bindings, RootedPath path, int idx, - boolean hasNext, - ImmutableMap<PathFragment, RepositoryName> managedDirectories) { + boolean hasNext) { this.pkg = Preconditions.checkNotNull(pkg); this.idx = idx; this.path = path; @@ -143,7 +137,6 @@ this.loadedModules = ImmutableMap.copyOf(loadedModules); this.loadToChunkMap = ImmutableMap.copyOf(loadToChunkMap); this.repositoryMapping = pkg.getExternalPackageRepositoryMappings(); - this.managedDirectories = managedDirectories; } /** @@ -224,8 +217,4 @@ public ImmutableMap<RepositoryName, ImmutableMap<String, RepositoryName>> getRepositoryMapping() { return repositoryMapping; } - - public ImmutableMap<PathFragment, RepositoryName> getManagedDirectories() { - return managedDirectories; - } }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java index f277bde..1751bfc 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java +++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java
@@ -18,8 +18,6 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import com.google.devtools.build.lib.cmdline.BazelModuleContext; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; @@ -30,15 +28,12 @@ import com.google.devtools.build.lib.cmdline.TargetPattern; import com.google.devtools.build.lib.packages.Package.NameConflictException; import com.google.devtools.build.lib.packages.RuleFactory.InvalidRuleException; -import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions; import com.google.devtools.build.lib.starlarkbuildapi.WorkspaceGlobalsApi; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.List; import java.util.Map; -import java.util.TreeMap; import java.util.regex.Pattern; import javax.annotation.Nullable; -import net.starlark.java.eval.Dict; import net.starlark.java.eval.EvalException; import net.starlark.java.eval.Module; import net.starlark.java.eval.Sequence; @@ -53,20 +48,15 @@ private final boolean allowOverride; private final RuleFactory ruleFactory; - // Mapping of the relative paths of the incrementally updated managed directories - // to the managing external repositories - private final TreeMap<PathFragment, RepositoryName> managedDirectoriesMap; public WorkspaceGlobals(boolean allowOverride, RuleFactory ruleFactory) { this.allowOverride = allowOverride; this.ruleFactory = ruleFactory; - this.managedDirectoriesMap = Maps.newTreeMap(); } @Override public void workspace( String name, - Dict<?, ?> managedDirectories, // <String, Object> StarlarkThread thread) throws EvalException, InterruptedException { if (!allowOverride) { @@ -101,95 +91,6 @@ // Add entry in repository map from "@name" --> "@" to avoid issue where bazel // treats references to @name as a separate external repo builder.addRepositoryMappingEntry(RepositoryName.MAIN, name, RepositoryName.MAIN); - parseManagedDirectories( - thread.getSemantics().getBool(BuildLanguageOptions.INCOMPATIBLE_DISABLE_MANAGE_DIRECTORIES), - Dict.cast(managedDirectories, String.class, Object.class, "managed_directories")); - } - - private void parseManagedDirectories( - boolean disabled, Map<String, ?> managedDirectories) // <String, Sequence<String>> - throws EvalException { - if (disabled && !managedDirectories.isEmpty()) { - throw Starlark.errorf( - "managed_directories is disabled. Pass the " - + "--noincompatible_disable_managed_directories command line option to temporarily " - + "re-enable it. For more information, see " - + "https://github.com/bazelbuild/bazel/issues/15463"); - } - - Map<PathFragment, String> nonNormalizedPathsMap = Maps.newHashMap(); - for (Map.Entry<String, ?> entry : managedDirectories.entrySet()) { - RepositoryName repositoryName = createRepositoryName(entry.getKey()); - List<PathFragment> paths = - getManagedDirectoriesPaths(entry.getValue(), nonNormalizedPathsMap); - for (PathFragment dir : paths) { - PathFragment floorKey = managedDirectoriesMap.floorKey(dir); - if (dir.equals(floorKey)) { - throw Starlark.errorf( - "managed_directories attribute should not contain multiple" - + " (or duplicate) repository mappings for the same directory ('%s').", - nonNormalizedPathsMap.get(dir)); - } - PathFragment ceilingKey = managedDirectoriesMap.ceilingKey(dir); - boolean isDescendant = floorKey != null && dir.startsWith(floorKey); - if (isDescendant || (ceilingKey != null && ceilingKey.startsWith(dir))) { - throw Starlark.errorf( - "managed_directories attribute value can not contain nested mappings." - + " '%s' is a descendant of '%s'.", - nonNormalizedPathsMap.get(isDescendant ? dir : ceilingKey), - nonNormalizedPathsMap.get(isDescendant ? floorKey : dir)); - } - managedDirectoriesMap.put(dir, repositoryName); - } - } - } - - private static RepositoryName createRepositoryName(String key) throws EvalException { - if (!key.startsWith("@")) { - throw Starlark.errorf( - "Cannot parse repository name '%s'. Repository name should start with '@'.", key); - } - try { - return RepositoryName.create(key.substring(1)); - } catch (LabelSyntaxException e) { - throw Starlark.errorf("%s", e); - } - } - - private static List<PathFragment> getManagedDirectoriesPaths( - Object directoriesList, Map<PathFragment, String> nonNormalizedPathsMap) - throws EvalException { - if (!(directoriesList instanceof Sequence)) { - throw Starlark.errorf( - "managed_directories attribute value should be of the type attr.string_list_dict()," - + " mapping repository name to the list of managed directories."); - } - List<PathFragment> result = Lists.newArrayList(); - for (Object obj : (Sequence) directoriesList) { - if (!(obj instanceof String)) { - throw Starlark.errorf("Expected managed directory path (as string), but got '%s'.", obj); - } - String path = ((String) obj).trim(); - if (path.isEmpty()) { - throw Starlark.errorf("Expected managed directory path to be non-empty string."); - } - PathFragment pathFragment = PathFragment.create(path); - if (pathFragment.isAbsolute()) { - throw Starlark.errorf( - "Expected managed directory path ('%s') to be relative to the workspace root.", path); - } - if (pathFragment.containsUplevelReferences()) { - throw Starlark.errorf( - "Expected managed directory path ('%s') to be under the workspace root.", path); - } - nonNormalizedPathsMap.put(pathFragment, path); - result.add(pathFragment); - } - return result; - } - - public Map<PathFragment, RepositoryName> getManagedDirectories() { - return managedDirectoriesMap; } private static RepositoryName getRepositoryName(@Nullable Label label) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java index eb886b4..83946fd 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java +++ b/src/main/java/com/google/devtools/build/lib/packages/semantics/BuildLanguageOptions.java
@@ -547,15 +547,6 @@ + "'cfg = \"exec\"' instead.") public boolean incompatibleDisableStarlarkHostTransitions; - @Option( - name = "incompatible_disable_managed_directories", - defaultValue = "true", - documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS, - metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE}, - effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS}, - help = "If set to true, the workspace(managed_directories=) attribute is disabled.") - public boolean incompatibleDisableManagedDirectories; - /** * An interner to reduce the number of StarlarkSemantics instances. A single Blaze instance should * never accumulate a large number of these and being able to shortcut on object identity makes a @@ -626,7 +617,6 @@ .setBool( INCOMPATIBLE_DISABLE_STARLARK_HOST_TRANSITIONS, incompatibleDisableStarlarkHostTransitions) - .setBool(INCOMPATIBLE_DISABLE_MANAGE_DIRECTORIES, incompatibleDisableManagedDirectories) .build(); return INTERNER.intern(semantics); } @@ -697,8 +687,6 @@ "-incompatible_top_level_aspects_require_providers"; public static final String INCOMPATIBLE_DISABLE_STARLARK_HOST_TRANSITIONS = "-incompatible_disable_starlark_host_transitions"; - public static final String INCOMPATIBLE_DISABLE_MANAGE_DIRECTORIES = - "+incompatible_disable_managed_directories"; // non-booleans public static final StarlarkSemantics.Key<String> EXPERIMENTAL_BUILTINS_BZL_PATH =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/BUILD b/src/main/java/com/google/devtools/build/lib/rules/BUILD index 2763e84..5cadf55 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/BUILD
@@ -34,7 +34,6 @@ ":repository/bind", ":repository/bind_rule", ":repository/local_repository_rule", - ":repository/managed_directories_knowledge_impl", ":repository/new_local_repository_function", ":repository/new_local_repository_rule", ":repository/new_repository_file_handler", @@ -312,20 +311,6 @@ ) java_library( - name = "repository/managed_directories_knowledge_impl", - srcs = ["repository/ManagedDirectoriesKnowledgeImpl.java"], - deps = [ - "//src/main/java/com/google/devtools/build/lib/cmdline", - "//src/main/java/com/google/devtools/build/lib/packages", - "//src/main/java/com/google/devtools/build/lib/skyframe:managed_directories_knowledge", - "//src/main/java/com/google/devtools/build/lib/util:abrupt_exit_exception", - "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment", - "//third_party:guava", - "//third_party:jsr305", - ], -) - -java_library( name = "repository/new_local_repository_function", srcs = ["repository/NewLocalRepositoryFunction.java"], deps = [ @@ -432,7 +417,6 @@ "//src/main/java/com/google/devtools/build/lib/repository:repository_failed_event", "//src/main/java/com/google/devtools/build/lib/skyframe:action_environment_function", "//src/main/java/com/google/devtools/build/lib/skyframe:already_reported_exception", - "//src/main/java/com/google/devtools/build/lib/skyframe:managed_directories_knowledge", "//src/main/java/com/google/devtools/build/lib/skyframe:package_lookup_function", "//src/main/java/com/google/devtools/build/lib/skyframe:package_lookup_value", "//src/main/java/com/google/devtools/build/lib/skyframe:precomputed_value",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/ManagedDirectoriesKnowledgeImpl.java b/src/main/java/com/google/devtools/build/lib/rules/repository/ManagedDirectoriesKnowledgeImpl.java deleted file mode 100644 index fbfd9ba..0000000 --- a/src/main/java/com/google/devtools/build/lib/rules/repository/ManagedDirectoriesKnowledgeImpl.java +++ /dev/null
@@ -1,105 +0,0 @@ -// Copyright 2019 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.rules.repository; - -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.ImmutableSortedMap; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import com.google.devtools.build.lib.cmdline.RepositoryName; -import com.google.devtools.build.lib.packages.WorkspaceFileValue; -import com.google.devtools.build.lib.skyframe.ManagedDirectoriesKnowledge; -import com.google.devtools.build.lib.util.AbruptExitException; -import com.google.devtools.build.lib.vfs.PathFragment; -import java.util.Comparator; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import javax.annotation.Nullable; - -/** Managed directories component. {@link ManagedDirectoriesKnowledge} */ -public class ManagedDirectoriesKnowledgeImpl implements ManagedDirectoriesKnowledge { - private final ManagedDirectoriesListener listener; - - private ImmutableSortedMap<PathFragment, RepositoryName> dirToRepoMap = ImmutableSortedMap.of(); - private ImmutableSortedMap<RepositoryName, ImmutableSet<PathFragment>> repoToDirMap = - ImmutableSortedMap.of(); - - public ManagedDirectoriesKnowledgeImpl(ManagedDirectoriesListener listener) { - this.listener = listener; - } - - @Override - @Nullable - public RepositoryName getOwnerRepository(PathFragment relativePathFragment) { - Map.Entry<PathFragment, RepositoryName> entry = dirToRepoMap.floorEntry(relativePathFragment); - if (entry != null && relativePathFragment.startsWith(entry.getKey())) { - return entry.getValue(); - } - return null; - } - - @Override - public ImmutableSet<PathFragment> getManagedDirectories(RepositoryName repositoryName) { - ImmutableSet<PathFragment> pathFragments = repoToDirMap.get(repositoryName); - return pathFragments != null ? pathFragments : ImmutableSet.of(); - } - - @Override - public boolean workspaceHeaderReloaded( - @Nullable WorkspaceFileValue oldValue, @Nullable WorkspaceFileValue newValue) - throws AbruptExitException { - if (Objects.equals(oldValue, newValue)) { - listener.onManagedDirectoriesRefreshed(repoToDirMap.keySet()); - return false; - } - Map<PathFragment, RepositoryName> oldDirToRepoMap = dirToRepoMap; - refreshMappings(newValue); - if (!Objects.equals(oldDirToRepoMap, dirToRepoMap)) { - listener.onManagedDirectoriesRefreshed(repoToDirMap.keySet()); - return true; - } - return false; - } - - private void refreshMappings(@Nullable WorkspaceFileValue newValue) { - if (newValue == null) { - dirToRepoMap = ImmutableSortedMap.of(); - repoToDirMap = ImmutableSortedMap.of(); - return; - } - - dirToRepoMap = ImmutableSortedMap.copyOf(newValue.getManagedDirectories()); - - Map<RepositoryName, Set<PathFragment>> reposMap = Maps.newHashMap(); - for (Map.Entry<PathFragment, RepositoryName> entry : dirToRepoMap.entrySet()) { - RepositoryName repositoryName = entry.getValue(); - reposMap.computeIfAbsent(repositoryName, name -> Sets.newTreeSet()).add(entry.getKey()); - } - - ImmutableSortedMap.Builder<RepositoryName, ImmutableSet<PathFragment>> reposMapBuilder = - new ImmutableSortedMap.Builder<>(Comparator.comparing(RepositoryName::getNameWithAt)); - for (Map.Entry<RepositoryName, Set<PathFragment>> entry : reposMap.entrySet()) { - reposMapBuilder.put(entry.getKey(), ImmutableSet.copyOf(entry.getValue())); - } - repoToDirMap = reposMapBuilder.buildOrThrow(); - } - - /** Interface allows {@link BazelRepositoryModule} to react to managed directories refreshes. */ - public interface ManagedDirectoriesListener { - void onManagedDirectoriesRefreshed(Set<RepositoryName> repositoryNames) - throws AbruptExitException; - } -}
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 dc93c9c..00bd817 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
@@ -15,15 +15,10 @@ package com.google.devtools.build.lib.rules.repository; -import static com.google.devtools.build.lib.rules.repository.RepositoryDirectoryDirtinessChecker.managedDirectoriesExist; - import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; import com.google.common.collect.Maps; -import com.google.common.collect.Ordering; import com.google.devtools.build.lib.actions.FileValue; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.bazel.bzlmod.BzlmodRepoRuleValue; @@ -39,7 +34,6 @@ import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue.NoRepositoryDirectoryValue; import com.google.devtools.build.lib.rules.repository.RepositoryFunction.AlreadyReportedRepositoryAccessException; import com.google.devtools.build.lib.rules.repository.RepositoryFunction.RepositoryFunctionException; -import com.google.devtools.build.lib.skyframe.ManagedDirectoriesKnowledge; import com.google.devtools.build.lib.skyframe.PrecomputedValue.Precomputed; import com.google.devtools.build.lib.util.Fingerprint; import com.google.devtools.build.lib.vfs.FileSystemUtils; @@ -53,15 +47,12 @@ import com.google.devtools.build.skyframe.SkyValue; import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.TreeMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Supplier; -import java.util.stream.Collectors; import javax.annotation.Nullable; /** @@ -110,9 +101,6 @@ private final AtomicBoolean isFetch; private final BlazeDirectories directories; - // Managed directories mappings, pre-calculated and injected by SequencedSkyframeExecutor - // before each command. - private final ManagedDirectoriesKnowledge managedDirectoriesKnowledge; private final ExternalPackageHelper externalPackageHelper; @@ -124,14 +112,12 @@ AtomicBoolean isFetch, Supplier<Map<String, String>> clientEnvironmentSupplier, BlazeDirectories directories, - ManagedDirectoriesKnowledge managedDirectoriesKnowledge, ExternalPackageHelper externalPackageHelper) { this.handlers = handlers; this.starlarkHandler = starlarkHandler; this.isFetch = isFetch; this.clientEnvironmentSupplier = clientEnvironmentSupplier; this.directories = directories; - this.managedDirectoriesKnowledge = managedDirectoriesKnowledge; this.externalPackageHelper = externalPackageHelper; } @@ -316,27 +302,18 @@ if (env.valuesMissing()) { return null; } - ImmutableSet<PathFragment> managedDirectories = - managedDirectoriesKnowledge.getManagedDirectories(repositoryName); - DigestWriter digestWriter = - new DigestWriter( - directories, - repositoryName, - rule, - managedDirectories); + DigestWriter digestWriter = new DigestWriter(directories, repositoryName, rule); // Local repositories are fetched regardless of the marker file because the operation is // generally fast and they do not depend on non-local data, so it does not make much sense to // try to cache them from across server instances. boolean fetchLocalRepositoryAlways = isFetch.get() && handler.isLocal(rule); - if (!fetchLocalRepositoryAlways - && managedDirectoriesExist(directories.getWorkspace(), managedDirectories)) { + if (!fetchLocalRepositoryAlways) { // For the non-local repositories, check if they are already up-to-date: // 1) unconditional fetching is not enabled, AND // 2) unconditional syncing is not enabled or the rule is not a configure rule, AND // 3) repository directory exists, AND - // 4) marker file correctly describes the current repository state, AND - // 5) managed directories, mapped to the repository, exist + // 4) marker file correctly describes the current repository state if (!needsConfiguring && doNotFetchUnconditionally && repoRoot.exists()) { byte[] markerHash = digestWriter.areRepositoryAndMarkerFileConsistent(handler, env); if (env.valuesMissing()) { @@ -393,11 +370,7 @@ return RepositoryDirectoryValue.builder() .setPath(repoRoot) .setFetchingDelayed() - .setDigest( - new Fingerprint() - .addIterableStrings( - Iterables.transform(managedDirectories, PathFragment::getPathString)) - .digestAndReset()) + .setDigest(new Fingerprint().digestAndReset()) .build(); } @@ -535,28 +508,16 @@ } private static class DigestWriter { - private static final String MANAGED_DIRECTORIES_MARKER = "$MANAGED"; private final Path markerPath; private final Rule rule; private final Map<String, String> markerData; private final String ruleKey; - DigestWriter( - BlazeDirectories directories, - RepositoryName repositoryName, - Rule rule, - ImmutableSet<PathFragment> managedDirectories) { + DigestWriter(BlazeDirectories directories, RepositoryName repositoryName, Rule rule) { ruleKey = computeRuleKey(rule); markerPath = getMarkerPath(directories, repositoryName.getName()); this.rule = rule; markerData = Maps.newHashMap(); - - List<PathFragment> directoriesList = Ordering.natural().sortedCopy(managedDirectories); - String directoriesString = - directoriesList.stream() - .map(PathFragment::getPathString) - .collect(Collectors.joining(" ")); - markerData.put(MANAGED_DIRECTORIES_MARKER, directoriesString); } byte[] writeMarkerFile() throws RepositoryFunctionException { @@ -602,10 +563,7 @@ content = FileSystemUtils.readContent(markerPath, StandardCharsets.UTF_8); String markerRuleKey = readMarkerFile(content, markerData); boolean verified = false; - if (Preconditions.checkNotNull(ruleKey).equals(markerRuleKey) - && Objects.equals( - markerData.get(MANAGED_DIRECTORIES_MARKER), - this.markerData.get(MANAGED_DIRECTORIES_MARKER))) { + if (Preconditions.checkNotNull(ruleKey).equals(markerRuleKey)) { verified = handler.verifyMarkerData(rule, markerData, env); if (env.valuesMissing()) { return null;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryDirtinessChecker.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryDirtinessChecker.java index c1c70d1..93828ea 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryDirtinessChecker.java +++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryDirtinessChecker.java
@@ -16,14 +16,9 @@ package com.google.devtools.build.lib.rules.repository; import com.google.common.annotations.VisibleForTesting; -import com.google.common.collect.ImmutableSet; -import com.google.devtools.build.lib.cmdline.RepositoryName; -import com.google.devtools.build.lib.skyframe.ManagedDirectoriesKnowledge; import com.google.devtools.build.lib.skyframe.SkyFunctions; import com.google.devtools.build.lib.skyframe.SkyValueDirtinessChecker; import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; -import com.google.devtools.build.lib.vfs.Path; -import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.vfs.SyscallCache; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; @@ -32,32 +27,13 @@ /** * A dirtiness checker that: * - * <p>Dirties {@link RepositoryDirectoryValue}s, if either: - * - * <ul> - * <li>they were produced in a {@code --nofetch} build, so that they are re-created on subsequent - * {@code --fetch} builds. The alternative solution would be to reify the value of the flag as - * a Skyframe value. - * <li>any of their managed directories do not exist. This dirtying allows the user to regenerate - * managed directory contents if they become corrupt, although it is unknown if this is useful - * in practice. (A more correct option here would be to build support for managed directories - * into FilesystemValueChecker, much like {@link - * com.google.devtools.build.lib.skyframe.FilesystemValueChecker#getDirtyActionValues}, so - * that changes to the contents of a managed directory would automatically invalidate the - * generating {@link RepositoryDirectoryValue}.) Changes in which directories are managed are - * handled in {@link ManagedDirectoriesKnowledge#workspaceHeaderReloaded}. - * </ul> + * <p>Dirties {@link RepositoryDirectoryValue}s, if they were produced in a {@code --nofetch} build, + * so that they are re-created on subsequent {@code --fetch} builds. The alternative solution would + * be to reify the value of the flag as a Skyframe value. */ @VisibleForTesting public class RepositoryDirectoryDirtinessChecker extends SkyValueDirtinessChecker { - private final Path workspaceRoot; - private final ManagedDirectoriesKnowledge managedDirectoriesKnowledge; - - public RepositoryDirectoryDirtinessChecker( - Path workspaceRoot, ManagedDirectoriesKnowledge managedDirectoriesKnowledge) { - this.workspaceRoot = workspaceRoot; - this.managedDirectoriesKnowledge = managedDirectoriesKnowledge; - } + public RepositoryDirectoryDirtinessChecker() {} @Override public boolean applies(SkyKey skyKey) { @@ -76,7 +52,6 @@ SkyValue skyValue, SyscallCache syscallCache, @Nullable TimestampGranularityMonitor tsgm) { - RepositoryName repositoryName = (RepositoryName) skyKey.argument(); RepositoryDirectoryValue repositoryValue = (RepositoryDirectoryValue) skyValue; if (!repositoryValue.repositoryExists()) { @@ -86,15 +61,6 @@ return DirtyResult.dirty(); } - if (!managedDirectoriesExist( - workspaceRoot, managedDirectoriesKnowledge.getManagedDirectories(repositoryName))) { - return DirtyResult.dirty(); - } return DirtyResult.notDirty(); } - - static boolean managedDirectoriesExist( - Path workspaceRoot, ImmutableSet<PathFragment> managedDirectories) { - return managedDirectories.stream().allMatch(pf -> workspaceRoot.getRelative(pf).exists()); - } }
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 10a2f67..8b7d279 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
@@ -234,7 +234,7 @@ } /** - * Convert to a @{link com.google.devtools.build.lib.skyframe.FileValue} to a String appropriate + * Convert to a {@link com.google.devtools.build.lib.actions.FileValue} to a String appropriate * for placing in a repository marker file. * * @param fileValue The value to convert. It must correspond to a regular file. @@ -527,22 +527,6 @@ } /** - * For paths that are under managed directories, we require that the corresponding FileStateValue - * or DirectoryListingStateValue is evaluated only after RepositoryDirectoryValue is evaluated. - * This way we guarantee that the repository rule is given a chance to update the managed - * directory before the files under the managed directory are accessed. - * - * <p>We do not need to require anything else (comparing to dependencies required for external - * repositories files), as overriding external repositories with managed directories is currently - * forbidden; also, we do not have do perform special checks for local_repository targets, since - * such targets cannot have managed directories by definition. - */ - public static void addManagedDirectoryDependencies(RepositoryName repositoryName, Environment env) - throws InterruptedException { - env.getValue(RepositoryDirectoryValue.key(repositoryName)); - } - - /** * Sets up a mapping of environment variables to use. */ public void setClientEnvironment(Map<String, String> clientEnvironment) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD index 0b5d910..03399b5 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -141,7 +141,6 @@ ":incremental_artifact_conflict_finder", ":loading_phase_started_event", ":local_repository_lookup_value", - ":managed_directories_knowledge", ":map_as_package_roots", ":metadata_consumer_for_metrics", ":output_store", @@ -323,7 +322,6 @@ "//src/main/java/com/google/devtools/build/lib/util:abrupt_exit_exception", "//src/main/java/com/google/devtools/build/lib/util:crash_failure_details", "//src/main/java/com/google/devtools/build/lib/util:detailed_exit_code", - "//src/main/java/com/google/devtools/build/lib/util:exit_code", "//src/main/java/com/google/devtools/build/lib/util:resource_usage", "//src/main/java/com/google/devtools/build/lib/util/io", "//src/main/java/com/google/devtools/build/lib/vfs", @@ -1527,19 +1525,6 @@ ) java_library( - name = "managed_directories_knowledge", - srcs = ["ManagedDirectoriesKnowledge.java"], - deps = [ - "//src/main/java/com/google/devtools/build/lib/cmdline", - "//src/main/java/com/google/devtools/build/lib/packages", - "//src/main/java/com/google/devtools/build/lib/util:abrupt_exit_exception", - "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment", - "//third_party:guava", - "//third_party:jsr305", - ], -) - -java_library( name = "map_as_package_roots", srcs = ["MapAsPackageRoots.java"], deps = [ @@ -2257,7 +2242,6 @@ name = "skyframe_executor_repository_helpers_holder", srcs = ["SkyframeExecutorRepositoryHelpersHolder.java"], deps = [ - ":managed_directories_knowledge", "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_function", "//third_party:auto_value", ],
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateFunction.java index 876ab3f..e2f1216 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateFunction.java
@@ -55,8 +55,7 @@ if (env.valuesMissing()) { return null; } - if (fileType == FileType.EXTERNAL_REPO - || fileType == FileType.EXTERNAL_IN_MANAGED_DIRECTORY) { + if (fileType == FileType.EXTERNAL_REPO) { // Do not use syscallCache as files under repositories get generated during the build, // while syscallCache is used independently from Skyframe and generally assumes // the file system is frozen at the beginning of the build command.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DirtinessCheckerUtils.java b/src/main/java/com/google/devtools/build/lib/skyframe/DirtinessCheckerUtils.java index 3d34f54..080598a 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/DirtinessCheckerUtils.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/DirtinessCheckerUtils.java
@@ -20,7 +20,6 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.FileStateValue; -import com.google.devtools.build.lib.bugreport.BugReport; import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.FileType; import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; import com.google.devtools.build.lib.vfs.Root; @@ -100,12 +99,9 @@ static final class MissingDiffDirtinessChecker extends BasicFilesystemDirtinessChecker { private final Set<Root> missingDiffPackageRoots; - private final ExternalFilesHelper externalFilesHelper; - MissingDiffDirtinessChecker( - Set<Root> missingDiffPackageRoots, ExternalFilesHelper externalFilesHelper) { + MissingDiffDirtinessChecker(Set<Root> missingDiffPackageRoots) { this.missingDiffPackageRoots = missingDiffPackageRoots; - this.externalFilesHelper = externalFilesHelper; } @Override @@ -113,26 +109,6 @@ return super.applies(key) && missingDiffPackageRoots.contains(((RootedPath) key.argument()).getRoot()); } - - @Override - public DirtyResult check( - SkyKey key, - @Nullable SkyValue oldValue, - SyscallCache syscallCache, - @Nullable TimestampGranularityMonitor tsgm) { - FileType fileType = externalFilesHelper.getAndNoteFileType((RootedPath) key.argument()); - if (fileType != FileType.INTERNAL) { - if (fileType != FileType.EXTERNAL_IN_MANAGED_DIRECTORY) { - BugReport.sendBugReport( - "File %s had unexpected type %s under one of package roots %s", - key, fileType, missingDiffPackageRoots); - } - DirtyResult result = super.check(key, oldValue, SyscallCache.NO_CACHE, tsgm); - // Don't populate Skyframe with new value if it might change. - return result.isDirty() ? DirtyResult.dirty() : result; - } - return super.check(key, oldValue, syscallCache, tsgm); - } } /** @@ -194,7 +170,6 @@ case EXTERNAL: case BUNDLED: return true; - case EXTERNAL_IN_MANAGED_DIRECTORY: case EXTERNAL_REPO: case OUTPUT: return false;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java b/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java index a4aebf2..ca8293f 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java
@@ -51,62 +51,40 @@ private boolean tooManyNonOutputExternalFilesSeen = false; private boolean anyFilesInExternalReposSeen = false; - // This is a set of external files that are not in managed directories or - // external repositories. + // This is a set of external files that are not in external repositories. private Set<RootedPath> nonOutputExternalFilesSeen = Sets.newConcurrentHashSet(); - private final ManagedDirectoriesKnowledge managedDirectoriesKnowledge; private ExternalFilesHelper( AtomicReference<PathPackageLocator> pkgLocator, ExternalFileAction externalFileAction, BlazeDirectories directories, - int maxNumExternalFilesToLog, - ManagedDirectoriesKnowledge managedDirectoriesKnowledge) { + int maxNumExternalFilesToLog) { this.pkgLocator = pkgLocator; this.externalFileAction = externalFileAction; this.directories = directories; this.maxNumExternalFilesToLog = maxNumExternalFilesToLog; - this.managedDirectoriesKnowledge = managedDirectoriesKnowledge; } public static ExternalFilesHelper create( AtomicReference<PathPackageLocator> pkgLocator, ExternalFileAction externalFileAction, - BlazeDirectories directories, - ManagedDirectoriesKnowledge managedDirectoriesKnowledge) { + BlazeDirectories directories) { return TestType.isInTest() - ? createForTesting(pkgLocator, externalFileAction, directories, managedDirectoriesKnowledge) + ? createForTesting(pkgLocator, externalFileAction, directories) : new ExternalFilesHelper( - pkgLocator, - externalFileAction, - directories, - /*maxNumExternalFilesToLog=*/ 100, - managedDirectoriesKnowledge); + pkgLocator, externalFileAction, directories, /*maxNumExternalFilesToLog=*/ 100); } public static ExternalFilesHelper createForTesting( AtomicReference<PathPackageLocator> pkgLocator, ExternalFileAction externalFileAction, BlazeDirectories directories) { - return createForTesting( - pkgLocator, - externalFileAction, - directories, - ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES); - } - - private static ExternalFilesHelper createForTesting( - AtomicReference<PathPackageLocator> pkgLocator, - ExternalFileAction externalFileAction, - BlazeDirectories directories, - ManagedDirectoriesKnowledge managedDirectoriesKnowledge) { return new ExternalFilesHelper( pkgLocator, externalFileAction, directories, // These log lines are mostly spam during unit and integration tests. - /*maxNumExternalFilesToLog=*/ 0, - managedDirectoriesKnowledge); + /*maxNumExternalFilesToLog=*/ 0); } @@ -144,8 +122,8 @@ INTERNAL, /** - * A non {@link #EXTERNAL_REPO} or {@link #EXTERNAL_IN_MANAGED_DIRECTORY} path outside the - * package roots about which we may make no other assumptions. + * A non {@link #EXTERNAL_REPO} path outside the package roots about which we may make no other + * assumptions. */ EXTERNAL, @@ -175,17 +153,6 @@ * RepositoryDirectoryValue is computed. */ EXTERNAL_REPO, - - /** - * A path is under one of the managed directories. Managed directories are user-owned - * directories, which can be incrementally updated by repository rules, so that the updated - * files are visible for the actions in the same build. - * - * <p>Every such path under the managed directory is generated or updated by the execution of - * the corresponding repository rule, so these paths should not be cached by Skyframe before the - * RepositoryDirectoryValue is computed. {@link ManagedDirectoriesKnowledge} - */ - EXTERNAL_IN_MANAGED_DIRECTORY, } /** @@ -232,11 +199,7 @@ ExternalFilesHelper cloneWithFreshExternalFilesKnowledge() { return new ExternalFilesHelper( - pkgLocator, - externalFileAction, - directories, - maxNumExternalFilesToLog, - managedDirectoriesKnowledge); + pkgLocator, externalFileAction, directories, maxNumExternalFilesToLog); } public FileType getAndNoteFileType(RootedPath rootedPath) { @@ -244,12 +207,6 @@ } private Pair<FileType, RepositoryName> getFileTypeAndRepository(RootedPath rootedPath) { - RepositoryName repositoryName = - managedDirectoriesKnowledge.getOwnerRepository(rootedPath.getRootRelativePath()); - if (repositoryName != null) { - anyFilesInExternalReposSeen = true; - return Pair.of(FileType.EXTERNAL_IN_MANAGED_DIRECTORY, repositoryName); - } FileType fileType = detectFileType(rootedPath); if (FileType.EXTERNAL == fileType) { if (nonOutputExternalFilesSeen.size() >= MAX_EXTERNAL_FILES_TO_TRACK) { @@ -309,12 +266,6 @@ FileType fileType = Preconditions.checkNotNull(pair.getFirst()); switch (fileType) { - case EXTERNAL_IN_MANAGED_DIRECTORY: - Preconditions.checkState( - externalFileAction == ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS, - externalFileAction); - RepositoryFunction.addManagedDirectoryDependencies(pair.getSecond(), env); - break; case BUNDLED: case INTERNAL: break;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FileStateFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/FileStateFunction.java index cba69ee..8b534e2 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/FileStateFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/FileStateFunction.java
@@ -60,8 +60,7 @@ if (env.valuesMissing()) { return null; } - if (fileType == FileType.EXTERNAL_REPO - || fileType == FileType.EXTERNAL_IN_MANAGED_DIRECTORY) { + if (fileType == FileType.EXTERNAL_REPO) { // do not use syscallCache as files under repositories get generated during the build return FileStateValue.create(rootedPath, SyscallCache.NO_CACHE, tsgm.get()); }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ManagedDirectoriesKnowledge.java b/src/main/java/com/google/devtools/build/lib/skyframe/ManagedDirectoriesKnowledge.java deleted file mode 100644 index 6ec3b0b..0000000 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ManagedDirectoriesKnowledge.java +++ /dev/null
@@ -1,77 +0,0 @@ -// Copyright 2019 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.skyframe; - -import com.google.common.collect.ImmutableSet; -import com.google.devtools.build.lib.cmdline.RepositoryName; -import com.google.devtools.build.lib.packages.WorkspaceFileValue; -import com.google.devtools.build.lib.util.AbruptExitException; -import com.google.devtools.build.lib.vfs.PathFragment; -import javax.annotation.Nullable; - -/** - * Managed directories are user-owned directories, which can be incrementally updated by repository - * rules, so that the updated files are visible for the actions in the same build. - * - * <p>File and directory nodes inside managed directories depend on the relevant {@link - * com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue} node, so that they are - * invalidated if the repository definition changes and recomputed based on the contents written by - * the repository rule. - * - * <p>The repository rule will also be re-run if any of the directories it manages is entirely - * missing. This allows a user to fairly cleanly regenerate managed directories. Whether this is an - * actually used feature is unknown to the Bazel developers. - */ -public interface ManagedDirectoriesKnowledge { - ManagedDirectoriesKnowledge NO_MANAGED_DIRECTORIES = - new ManagedDirectoriesKnowledge() { - @Override - public boolean workspaceHeaderReloaded( - @Nullable WorkspaceFileValue oldValue, @Nullable WorkspaceFileValue newValue) { - return false; - } - - @Nullable - @Override - public RepositoryName getOwnerRepository(PathFragment relativePathFragment) { - return null; - } - - @Override - public ImmutableSet<PathFragment> getManagedDirectories(RepositoryName repositoryName) { - return ImmutableSet.of(); - } - }; - - /** - * Returns true if the multi-mapping of repository -> {managed directory} changes. Such changes - * trigger a full wipe of the Skyframe graph, similar to a --package_path flag change. - */ - boolean workspaceHeaderReloaded( - @Nullable WorkspaceFileValue oldValue, @Nullable WorkspaceFileValue newValue) - throws AbruptExitException; - - /** - * Returns the owning repository for the incrementally updated path, or null. - * - * @param relativePathFragment path to check, relative to workspace root - * @return RepositoryName or null if there is no owning repository - */ - @Nullable - RepositoryName getOwnerRepository(PathFragment relativePathFragment); - - /** Returns managed directories for the passed repository. */ - ImmutableSet<PathFragment> getManagedDirectories(RepositoryName repositoryName); -}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java index 4d33299..5702185 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
@@ -31,7 +31,6 @@ import com.google.common.flogger.GoogleLogger; import com.google.devtools.build.lib.actions.ActionKeyContext; import com.google.devtools.build.lib.actions.CommandLineExpansionException; -import com.google.devtools.build.lib.actions.FileStateType; import com.google.devtools.build.lib.actions.FileStateValue; import com.google.devtools.build.lib.actions.FileValue; import com.google.devtools.build.lib.analysis.AspectValue; @@ -44,7 +43,6 @@ import com.google.devtools.build.lib.bazel.repository.RepositoryOptions; import com.google.devtools.build.lib.bugreport.BugReporter; import com.google.devtools.build.lib.buildtool.BuildRequestOptions; -import com.google.devtools.build.lib.cmdline.LabelConstants; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.concurrent.Uninterruptibles; import com.google.devtools.build.lib.events.Event; @@ -58,17 +56,12 @@ import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; -import com.google.devtools.build.lib.packages.WorkspaceFileValue; -import com.google.devtools.build.lib.packages.WorkspaceFileValue.WorkspaceFileKey; import com.google.devtools.build.lib.pkgcache.PackageOptions; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.profiler.Profiler; import com.google.devtools.build.lib.profiler.ProfilerTask; import com.google.devtools.build.lib.profiler.SilentCloseable; import com.google.devtools.build.lib.repository.ExternalPackageHelper; -import com.google.devtools.build.lib.server.FailureDetails; -import com.google.devtools.build.lib.server.FailureDetails.FailureDetail; -import com.google.devtools.build.lib.server.FailureDetails.Workspaces; import com.google.devtools.build.lib.skyframe.AspectKeyCreator.AspectKey; import com.google.devtools.build.lib.skyframe.DiffAwarenessManager.ProcessableModifiedFileSet; import com.google.devtools.build.lib.skyframe.DirtinessCheckerUtils.BasicFilesystemDirtinessChecker; @@ -83,8 +76,6 @@ import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy; import com.google.devtools.build.lib.skyframe.rewinding.RewindableGraphInconsistencyReceiver; import com.google.devtools.build.lib.util.AbruptExitException; -import com.google.devtools.build.lib.util.DetailedExitCode; -import com.google.devtools.build.lib.util.ExitCode; import com.google.devtools.build.lib.util.Pair; import com.google.devtools.build.lib.util.ResourceUsage; import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; @@ -207,9 +198,6 @@ /*shouldUnblockCpuWorkWhenFetchingDeps=*/ false, new PackageProgressReceiver(), new ConfiguredTargetProgressReceiver(), - repositoryHelpersHolder == null - ? null - : repositoryHelpersHolder.managedDirectoriesKnowledge(), skyKeyStateReceiver, bugReporter); this.diffAwarenessManager = new DiffAwarenessManager(diffAwarenessFactories); @@ -391,15 +379,6 @@ modifiedFiles.set(0); numSourceFilesCheckedBecauseOfMissingDiffs = 0; - // Read the WORKSPACE file header, but only invalidate if tracking incremental state. Otherwise, - // this command started with a fresh graph already, and attempting to invalidate edgeless nodes - // results in a crash. - boolean managedDirectoriesChanged = - repositoryHelpersHolder != null && refreshWorkspaceHeader(eventHandler); - if (managedDirectoriesChanged && trackIncrementalState) { - invalidateCachedWorkspacePathsStates(); - } - WorkspaceInfoFromDiff workspaceInfo = null; Map<Root, DiffAwarenessManager.ProcessableModifiedFileSet> modifiedFilesByPathEntry = Maps.newHashMap(); @@ -422,8 +401,7 @@ } BuildRequestOptions buildRequestOptions = options.getOptions(BuildRequestOptions.class); int fsvcThreads = buildRequestOptions == null ? 200 : buildRequestOptions.fsvcThreads; - handleDiffsWithCompleteDiffInformation( - tsgm, modifiedFilesByPathEntry, managedDirectoriesChanged, fsvcThreads); + handleDiffsWithCompleteDiffInformation(tsgm, modifiedFilesByPathEntry, fsvcThreads); RepositoryOptions repoOptions = options.getOptions(RepositoryOptions.class); handleDiffsWithMissingDiffInformation( eventHandler, @@ -431,42 +409,11 @@ pathEntriesWithoutDiffInformation, options.getOptions(PackageOptions.class).checkOutputFiles, repoOptions == null || repoOptions.checkExternalRepositoryFiles, - managedDirectoriesChanged, fsvcThreads); handleClientEnvironmentChanges(); return workspaceInfo; } - /** - * Skyframe caches the states of files (FileStateValue) and directory listings - * (DirectoryListingStateValue). In the case when the files/directories are under a managed - * directory or inside an external repository, evaluation of file/directory listing states - * requires that RepositoryDirectoryValue of the owning external repository is evaluated - * beforehand. (So that the repository rule generates the files.) So there is a dependency on - * RepositoryDirectoryValue for files under managed directories and external repositories. This - * dependency is recorded by Skyframe. - * - * <p>From the other side, by default Skyframe injects the new values of changed files already at - * the stage of checking what files have changed. Only values without any dependencies can be - * injected into Skyframe. - * - * <p>When the values of managed directories change, whether a file is under a managed directory - * can change. This implies that corresponding file/directory listing states gain the dependency - * (RepositoryDirectoryValue) or they lose this dependency. In both cases, we should prevent - * Skyframe from injecting those new values of file/directory listing states at the stage of - * checking changed files, because the files have not been generated yet. - * - * <p>The selected approach is to invalidate PACKAGE_LOCATOR_DEPENDENT_VALUES, which includes - * invalidating all cached file/directory listing state values. Additionally, no new - * FileStateValues and DirectoryStateValues should be injected. - */ - private void invalidateCachedWorkspacePathsStates() { - logger.atInfo().log( - "Invalidating cached packages and paths states" - + " because managed directories configuration has changed."); - invalidate(SkyFunctionName.functionIsIn(PACKAGE_LOCATOR_DEPENDENT_VALUES)); - } - /** Invalidates entries in the client environment. */ private void handleClientEnvironmentChanges() { // Remove deleted client environmental variables. @@ -496,7 +443,6 @@ private void handleDiffsWithCompleteDiffInformation( TimestampGranularityMonitor tsgm, Map<Root, ProcessableModifiedFileSet> modifiedFilesByPathEntry, - boolean managedDirectoriesChanged, int fsvcThreads) throws InterruptedException, AbruptExitException { for (Root pathEntry : ImmutableSet.copyOf(modifiedFilesByPathEntry.keySet())) { @@ -507,8 +453,7 @@ handleChangedFiles( ImmutableList.of(pathEntry), getDiff(tsgm, modifiedFileSet, pathEntry, fsvcThreads), - /*numSourceFilesCheckedIfDiffWasMissing=*/ 0, - managedDirectoriesChanged); + /*numSourceFilesCheckedIfDiffWasMissing=*/ 0); processableModifiedFileSet.markProcessed(); } } @@ -523,7 +468,6 @@ Set<Pair<Root, ProcessableModifiedFileSet>> pathEntriesWithoutDiffInformation, boolean checkOutputFiles, boolean checkExternalRepositoryFiles, - boolean managedDirectoriesChanged, int fsvcThreads) throws InterruptedException { @@ -571,8 +515,7 @@ Iterables.concat( dirtinessCheckers, ImmutableList.of( - new MissingDiffDirtinessChecker( - diffPackageRootsUnderWhichToCheck, tmpExternalFilesHelper))); + new MissingDiffDirtinessChecker(diffPackageRootsUnderWhichToCheck))); } if (checkExternalRepositoryFiles && repositoryHelpersHolder != null) { dirtinessCheckers = @@ -581,8 +524,7 @@ ImmutableList.of(repositoryHelpersHolder.repositoryDirectoryDirtinessChecker())); } if (checkExternalRepositoryFiles) { - fileTypesToCheck = - EnumSet.of(FileType.EXTERNAL_REPO, FileType.EXTERNAL_IN_MANAGED_DIRECTORY); + fileTypesToCheck = EnumSet.of(FileType.EXTERNAL_REPO); } if (externalFilesKnowledge.tooManyNonOutputExternalFilesSeen || !externalFilesKnowledge.nonOutputExternalFilesSeen.isEmpty()) { @@ -614,8 +556,7 @@ handleChangedFiles( diffPackageRootsUnderWhichToCheck, batchDirtyResult, - /*numSourceFilesCheckedIfDiffWasMissing=*/ batchDirtyResult.getNumKeysChecked(), - managedDirectoriesChanged); + /*numSourceFilesCheckedIfDiffWasMissing=*/ batchDirtyResult.getNumKeysChecked()); // We use the knowledge gained during the graph scan that just completed. Otherwise, naively, // once an external file gets into the Skyframe graph, we'll overly-conservatively always // think the graph needs to be scanned. @@ -648,10 +589,7 @@ new ExternalDirtinessChecker(externalFilesHelper, EnumSet.of(FileType.EXTERNAL))); } handleChangedFiles( - ImmutableList.of(), - batchDirtyResult, - batchDirtyResult.getNumKeysChecked(), - /*managedDirectoriesChanged=*/ false); + ImmutableList.of(), batchDirtyResult, batchDirtyResult.getNumKeysChecked()); } for (Pair<Root, DiffAwarenessManager.ProcessableModifiedFileSet> pair : pathEntriesWithoutDiffInformation) { @@ -662,21 +600,11 @@ private void handleChangedFiles( Collection<Root> diffPackageRootsUnderWhichToCheck, Differencer.Diff diff, - int numSourceFilesCheckedIfDiffWasMissing, - boolean managedDirectoriesChanged) { + int numSourceFilesCheckedIfDiffWasMissing) { int numWithoutNewValues = diff.changedKeysWithoutNewValues().size(); Iterable<SkyKey> keysToBeChangedLaterInThisBuild = diff.changedKeysWithoutNewValues(); Map<SkyKey, SkyValue> changedKeysWithNewValues = diff.changedKeysWithNewValues(); - // If managed directories settings changed, do not inject any new values, just invalidate - // keys of the changed values. {@link #invalidateCachedWorkspacePathsStates()} - if (managedDirectoriesChanged) { - numWithoutNewValues += changedKeysWithNewValues.size(); - keysToBeChangedLaterInThisBuild = - Iterables.concat(keysToBeChangedLaterInThisBuild, changedKeysWithNewValues.keySet()); - changedKeysWithNewValues = ImmutableMap.of(); - } - logDiffInfo( diffPackageRootsUnderWhichToCheck, keysToBeChangedLaterInThisBuild, @@ -1030,86 +958,6 @@ } } - /** - * Calculate the new value of the WORKSPACE file header (WorkspaceFileValue with the index = 0), - * and call the listener, if the value has changed. Needed for incremental update of user-owned - * directories by repository rules. - */ - private boolean refreshWorkspaceHeader(ExtendedEventHandler eventHandler) - throws InterruptedException, AbruptExitException { - Root workspaceRoot = Root.fromPath(directories.getWorkspace()); - RootedPath workspacePath = - RootedPath.toRootedPath(workspaceRoot, LabelConstants.WORKSPACE_FILE_NAME); - WorkspaceFileKey workspaceFileKey = WorkspaceFileValue.key(workspacePath); - - WorkspaceFileValue oldValue = - (WorkspaceFileValue) memoizingEvaluator.getExistingValue(workspaceFileKey); - FileStateValue newFileStateValue = maybeInvalidateWorkspaceFileStateValue(workspacePath); - WorkspaceFileValue newValue = - (WorkspaceFileValue) evaluateSingleValue(workspaceFileKey, eventHandler); - if (newValue != null - && !newValue.getManagedDirectories().isEmpty() - && FileStateType.SYMLINK.equals(newFileStateValue.getType())) { - throw new AbruptExitException( - DetailedExitCode.of( - ExitCode.PARSING_FAILURE, - FailureDetail.newBuilder() - .setMessage( - "WORKSPACE file can not be a symlink if incrementally updated directories" - + " are used.") - .setWorkspaces( - Workspaces.newBuilder() - .setCode( - FailureDetails.Workspaces.Code - .ILLEGAL_WORKSPACE_FILE_SYMLINK_WITH_MANAGED_DIRECTORIES)) - .build())); - } - return repositoryHelpersHolder - .managedDirectoriesKnowledge() - .workspaceHeaderReloaded(oldValue, newValue); - } - - // We only check the FileStateValue of the WORKSPACE file; we do not support the case - // when the WORKSPACE file is a symlink. - private FileStateValue maybeInvalidateWorkspaceFileStateValue(RootedPath workspacePath) - throws InterruptedException, AbruptExitException { - SkyKey workspaceFileStateKey = FileStateValue.key(workspacePath); - SkyValue oldWorkspaceFileState = memoizingEvaluator.getExistingValue(workspaceFileStateKey); - FileStateValue newWorkspaceFileState; - try { - newWorkspaceFileState = - FileStateValue.create(workspacePath, perCommandSyscallCache, tsgm.get()); - } catch (IOException e) { - throw new AbruptExitException( - DetailedExitCode.of( - ExitCode.PARSING_FAILURE, - FailureDetail.newBuilder() - .setMessage("Can not read WORKSPACE file.") - .setWorkspaces( - Workspaces.newBuilder() - .setCode( - FailureDetails.Workspaces.Code - .WORKSPACE_FILE_READ_FAILURE_WITH_MANAGED_DIRECTORIES)) - .build()), - e); - } - if (oldWorkspaceFileState != null && !oldWorkspaceFileState.equals(newWorkspaceFileState)) { - recordingDiffer.invalidate(ImmutableSet.of(workspaceFileStateKey)); - } - return newWorkspaceFileState; - } - - private SkyValue evaluateSingleValue(SkyKey key, ExtendedEventHandler eventHandler) - throws InterruptedException { - EvaluationContext evaluationContext = - newEvaluationContextBuilder() - .setKeepGoing(false) - .setNumThreads(DEFAULT_THREAD_COUNT) - .setEventHandler(eventHandler) - .build(); - return memoizingEvaluator.evaluate(ImmutableSet.of(key), evaluationContext).get(key); - } - public static Builder builder() { return new Builder(); }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java index 7ce5c0a..9285981 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -418,7 +418,6 @@ boolean shouldUnblockCpuWorkWhenFetchingDeps, @Nullable PackageProgressReceiver packageProgress, @Nullable ConfiguredTargetProgressReceiver configuredTargetProgress, - @Nullable ManagedDirectoriesKnowledge managedDirectoriesKnowledge, SkyKeyStateReceiver skyKeyStateReceiver, BugReporter bugReporter) { // Strictly speaking, these arguments are not required for initialization, but all current @@ -462,13 +461,7 @@ this.skyframeBuildView = new SkyframeBuildView(artifactFactory, this, ruleClassProvider, actionKeyContext); this.externalFilesHelper = - ExternalFilesHelper.create( - pkgLocator, - externalFileAction, - directories, - managedDirectoriesKnowledge != null - ? managedDirectoriesKnowledge - : ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES); + ExternalFilesHelper.create(pkgLocator, externalFileAction, directories); this.crossRepositoryLabelViolationStrategy = crossRepositoryLabelViolationStrategy; this.buildFilesByPriority = buildFilesByPriority; this.externalPackageHelper = externalPackageHelper;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorRepositoryHelpersHolder.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorRepositoryHelpersHolder.java index a858478..f61f722 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorRepositoryHelpersHolder.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorRepositoryHelpersHolder.java
@@ -20,14 +20,11 @@ /** Provides repository-related objects for use by {@link SequencedSkyframeExecutor}. */ @AutoValue public abstract class SkyframeExecutorRepositoryHelpersHolder { - public abstract ManagedDirectoriesKnowledge managedDirectoriesKnowledge(); - public abstract RepositoryDirectoryDirtinessChecker repositoryDirectoryDirtinessChecker(); public static SkyframeExecutorRepositoryHelpersHolder create( - ManagedDirectoriesKnowledge managedDirectoriesKnowledge, RepositoryDirectoryDirtinessChecker repositoryDirectoryDirtinessChecker) { return new AutoValue_SkyframeExecutorRepositoryHelpersHolder( - managedDirectoriesKnowledge, repositoryDirectoryDirtinessChecker); + repositoryDirectoryDirtinessChecker); } }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java index 3ea17ab..37ddb85 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
@@ -250,8 +250,7 @@ /* bindings = */ ImmutableMap.<String, Object>of(), workspaceFile, /* idx = */ 0, // first fragment - /* hasNext = */ false, - ImmutableMap.of()); + /* hasNext = */ false); } // Get the state at the end of the previous chunk. @@ -354,8 +353,7 @@ parser.getVariableBindings(), workspaceFile, key.getIndex(), - key.getIndex() < chunks.size() - 1, - ImmutableMap.copyOf(parser.getManagedDirectories())); + key.getIndex() < chunks.size() - 1); } private static StarlarkFile parseWorkspaceFile(
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java index b69533c..8f0e648 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
@@ -66,7 +66,6 @@ import com.google.devtools.build.lib.skyframe.FileFunction; import com.google.devtools.build.lib.skyframe.FileStateFunction; import com.google.devtools.build.lib.skyframe.IgnoredPackagePrefixesFunction; -import com.google.devtools.build.lib.skyframe.ManagedDirectoriesKnowledge; import com.google.devtools.build.lib.skyframe.PackageFunction; import com.google.devtools.build.lib.skyframe.PackageFunction.ActionOnIOExceptionReadingBuildFile; import com.google.devtools.build.lib.skyframe.PackageFunction.GlobbingStrategy; @@ -246,11 +245,7 @@ public final PackageLoader build() { validate(); externalFilesHelper = - ExternalFilesHelper.create( - pkgLocatorRef, - externalFileAction, - directories, - ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES); + ExternalFilesHelper.create(pkgLocatorRef, externalFileAction, directories); return buildImpl(); }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD index bf0855e..f704ea2 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD
@@ -48,7 +48,6 @@ "//src/main/java/com/google/devtools/build/lib/skyframe:containing_package_lookup_function", "//src/main/java/com/google/devtools/build/lib/skyframe:file_function", "//src/main/java/com/google/devtools/build/lib/skyframe:ignored_package_prefixes_function", - "//src/main/java/com/google/devtools/build/lib/skyframe:managed_directories_knowledge", "//src/main/java/com/google/devtools/build/lib/skyframe:package_lookup_function", "//src/main/java/com/google/devtools/build/lib/skyframe:package_value", "//src/main/java/com/google/devtools/build/lib/skyframe:per_build_syscall_cache", @@ -87,7 +86,6 @@ "//src/main/java/com/google/devtools/build/lib/skyframe:action_environment_function", "//src/main/java/com/google/devtools/build/lib/skyframe:client_environment_function", "//src/main/java/com/google/devtools/build/lib/skyframe:directory_listing_function", - "//src/main/java/com/google/devtools/build/lib/skyframe:managed_directories_knowledge", "//src/main/java/com/google/devtools/build/lib/skyframe:package_lookup_function", "//src/main/java/com/google/devtools/build/lib/skyframe:precomputed_value", "//src/main/java/com/google/devtools/build/lib/skyframe:sky_functions",
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java index 3cff84d..2f1cf6c 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java
@@ -34,7 +34,6 @@ import com.google.devtools.build.lib.skyframe.DirectoryListingStateFunction; import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.ExternalFileAction; import com.google.devtools.build.lib.skyframe.LocalRepositoryLookupFunction; -import com.google.devtools.build.lib.skyframe.ManagedDirectoriesKnowledge; import com.google.devtools.build.lib.skyframe.PackageFunction.ActionOnIOExceptionReadingBuildFile; import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy; import com.google.devtools.build.lib.skyframe.PrecomputedValue; @@ -130,7 +129,6 @@ isFetch, ImmutableMap::of, directories, - ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES, EXTERNAL_PACKAGE_HELPER)) .build());
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/WorkspaceGlobalsApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/WorkspaceGlobalsApi.java index deae557..93d27f9 100644 --- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/WorkspaceGlobalsApi.java +++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/WorkspaceGlobalsApi.java
@@ -19,7 +19,6 @@ import net.starlark.java.annot.Param; import net.starlark.java.annot.ParamType; import net.starlark.java.annot.StarlarkMethod; -import net.starlark.java.eval.Dict; import net.starlark.java.eval.EvalException; import net.starlark.java.eval.NoneType; import net.starlark.java.eval.Sequence; @@ -62,24 +61,9 @@ + "letters, numbers, underscores, dashes, and dots.", named = true, positional = false), - @Param( - name = "managed_directories", - named = true, - positional = false, - defaultValue = "{}", - doc = - "Dict (strings to list of strings) for defining the mappings between external" - + " repositories and relative (to the workspace root) paths to directories" - + " they incrementally update." - + "\nManaged directories must be excluded from the source tree by listing" - + " them (or their parent directories) in the .bazelignore file."), }, useStarlarkThread = true) - void workspace( - String name, - Dict<?, ?> managedDirectories, // <String, Sequence<String>> - StarlarkThread thread) - throws EvalException, InterruptedException; + void workspace(String name, StarlarkThread thread) throws EvalException, InterruptedException; @StarlarkMethod( name = "register_execution_platforms",