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",