diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelFetchAllFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelFetchAllFunction.java index b58677fdf42022..17ff239e0546a7 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelFetchAllFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelFetchAllFunction.java @@ -57,16 +57,16 @@ public SkyValue compute(SkyKey skyKey, Environment env) throws InterruptedExcept // 2. Run every extension found in the modules & collect its generated repos ImmutableSet extensionIds = depGraphValue.getExtensionUsagesTable().rowKeySet(); - ImmutableSet singleEvalKeys = + ImmutableSet singleExtensionKeys = extensionIds.stream().map(SingleExtensionValue::key).collect(toImmutableSet()); - SkyframeLookupResult singleEvalValues = env.getValuesAndExceptions(singleEvalKeys); - for (SkyKey singleEvalKey : singleEvalKeys) { - SingleExtensionValue singleEvalValue = - (SingleExtensionValue) singleEvalValues.get(singleEvalKey); - if (singleEvalValue == null) { + SkyframeLookupResult singleExtensionValues = env.getValuesAndExceptions(singleExtensionKeys); + for (SkyKey singleExtensionKey : singleExtensionKeys) { + SingleExtensionValue singleExtensionValue = + (SingleExtensionValue) singleExtensionValues.get(singleExtensionKey); + if (singleExtensionValue == null) { return null; } - reposToFetch.addAll(singleEvalValue.getCanonicalRepoNameToInternalNames().keySet()); + reposToFetch.addAll(singleExtensionValue.getCanonicalRepoNameToInternalNames().keySet()); } // 3. If this is fetch configure, get repo rules and only collect repos marked as configure diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileModule.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileModule.java index 581207ac10c29d..c071274c276f1b 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileModule.java @@ -73,10 +73,10 @@ public void afterCommand() throws AbruptExitException { // validation later fails due to invalid imports. var newExtensionInfos = evaluator.getDoneValues().entrySet().stream() - .filter(entry -> entry.getKey() instanceof SingleExtensionValue.UnvalidatedKey) + .filter(entry -> entry.getKey() instanceof SingleExtensionValue.EvalKey) .collect( toImmutableMap( - entry -> ((SingleExtensionValue.UnvalidatedKey) entry.getKey()).argument(), + entry -> ((SingleExtensionValue.EvalKey) entry.getKey()).argument(), entry -> ((SingleExtensionValue) entry.getValue()).getLockFileInfo().get())); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModTidyFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModTidyFunction.java index a20e56fdda423e..0f3ba32f020425 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModTidyFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModTidyFunction.java @@ -95,7 +95,7 @@ public SkyValue compute(SkyKey skyKey, Environment env) .stream() // Use the unvalidated key to avoid errors caused by incorrect imports - we can fix // them. - .map(SingleExtensionValue::unvalidatedKey) + .map(SingleExtensionValue::evalKey) .collect(toImmutableSet()); SkyframeLookupResult result = env.getValuesAndExceptions(extensionsUsedByRootModule); if (env.valuesMissing()) { diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleInspectorFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleInspectorFunction.java index 8eb9dfb8978d75..9dc9e1b95379f6 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleInspectorFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleInspectorFunction.java @@ -179,20 +179,20 @@ private ImmutableSetMultimap computeExtensionToRepoIn BazelDepGraphValue depGraphValue, Environment env) throws InterruptedException { ImmutableSet extensionEvalKeys = depGraphValue.getExtensionUsagesTable().rowKeySet(); - ImmutableList singleEvalKeys = + ImmutableList singleExtensionKeys = extensionEvalKeys.stream().map(SingleExtensionValue::key).collect(toImmutableList()); - SkyframeLookupResult singleEvalValues = env.getValuesAndExceptions(singleEvalKeys); + SkyframeLookupResult singleExtensionValues = env.getValuesAndExceptions(singleExtensionKeys); ImmutableSetMultimap.Builder extensionToRepoInternalNames = ImmutableSetMultimap.builder(); - for (SingleExtensionValue.Key singleEvalKey : singleEvalKeys) { - SingleExtensionValue singleEvalValue = - (SingleExtensionValue) singleEvalValues.get(singleEvalKey); - if (singleEvalValue == null) { + for (SingleExtensionValue.Key singleExtensionKey : singleExtensionKeys) { + SingleExtensionValue singleExtensionValue = + (SingleExtensionValue) singleExtensionValues.get(singleExtensionKey); + if (singleExtensionValue == null) { return null; } extensionToRepoInternalNames.putAll( - singleEvalKey.argument(), singleEvalValue.getGeneratedRepoSpecs().keySet()); + singleExtensionKey.argument(), singleExtensionValue.getGeneratedRepoSpecs().keySet()); } return extensionToRepoInternalNames.build(); } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionFunction.java index 80439570de00f1..49656842eaab0f 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionFunction.java @@ -17,6 +17,7 @@ import com.google.devtools.build.lib.server.FailureDetails.ExternalDeps.Code; import com.google.devtools.build.skyframe.SkyFunction; +import com.google.devtools.build.skyframe.SkyFunctionException; import com.google.devtools.build.skyframe.SkyFunctionException.Transience; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; @@ -34,8 +35,7 @@ public class SingleExtensionFunction implements SkyFunction { @Nullable @Override public SkyValue compute(SkyKey skyKey, Environment env) - throws InterruptedException, - SingleExtensionEvalFunction.SingleExtensionEvalFunctionException { + throws InterruptedException, SingleExtensionFunctionException { ModuleExtensionId extensionId = (ModuleExtensionId) skyKey.argument(); SingleExtensionUsagesValue usagesValue = (SingleExtensionUsagesValue) env.getValue(SingleExtensionUsagesValue.key(extensionId)); @@ -43,7 +43,7 @@ public SkyValue compute(SkyKey skyKey, Environment env) return null; } SingleExtensionValue unvalidatedValue = - (SingleExtensionValue) env.getValue(SingleExtensionValue.unvalidatedKey(extensionId)); + (SingleExtensionValue) env.getValue(SingleExtensionValue.evalKey(extensionId)); if (unvalidatedValue == null) { return null; } @@ -52,7 +52,7 @@ public SkyValue compute(SkyKey skyKey, Environment env) for (ModuleExtensionUsage usage : usagesValue.getExtensionUsages().values()) { for (Entry repoImport : usage.getImports().entrySet()) { if (!unvalidatedValue.getGeneratedRepoSpecs().containsKey(repoImport.getValue())) { - throw new SingleExtensionEvalFunction.SingleExtensionEvalFunctionException( + throw new SingleExtensionFunctionException( ExternalDepsException.withMessage( Code.INVALID_EXTENSION_IMPORT, "module extension \"%s\" from \"%s\" does not generate repository \"%s\", yet it" @@ -71,4 +71,11 @@ public SkyValue compute(SkyKey skyKey, Environment env) return unvalidatedValue; } + + static final class SingleExtensionFunctionException extends SkyFunctionException { + + SingleExtensionFunctionException(ExternalDepsException cause, Transience transience) { + super(cause, transience); + } + } } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionValue.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionValue.java index 8b64f0f2166355..d8fadc7dc9b62a 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionValue.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionValue.java @@ -78,13 +78,13 @@ public static Key key(ModuleExtensionId id) { * repositories generated by the extension. This is only meant for special applications such as * {@code bazel mod tidy}. */ - static UnvalidatedKey unvalidatedKey(ModuleExtensionId id) { - return UnvalidatedKey.create(id); + static EvalKey evalKey(ModuleExtensionId id) { + return EvalKey.create(id); } /** - * The {@link com.google.devtools.build.skyframe.SkyKey} of a {@link - * SingleExtensionValue} + * The {@link SkyKey} of a {@link SingleExtensionValue} containing the result of extension + * evaluation. */ @AutoCodec public static class Key extends AbstractSkyKey { @@ -116,24 +116,24 @@ public SkyKeyInterner getSkyKeyInterner() { } /** - * The {@link com.google.devtools.build.skyframe.SkyKey} of an unvalidated {@link - * SingleExtensionValue} + * The {@link SkyKey} of an {@link SingleExtensionValue} containing the unvalidated result + * of extension evaluation. */ @AutoCodec - static class UnvalidatedKey extends AbstractSkyKey { - private static final SkyKeyInterner interner = SkyKey.newInterner(); + static class EvalKey extends AbstractSkyKey { + private static final SkyKeyInterner interner = SkyKey.newInterner(); - protected UnvalidatedKey(ModuleExtensionId arg) { + protected EvalKey(ModuleExtensionId arg) { super(arg); } - private static UnvalidatedKey create(ModuleExtensionId arg) { - return interner.intern(new UnvalidatedKey(arg)); + private static EvalKey create(ModuleExtensionId arg) { + return interner.intern(new EvalKey(arg)); } @VisibleForSerialization @AutoCodec.Interner - static UnvalidatedKey intern(UnvalidatedKey key) { + static EvalKey intern(EvalKey key) { return interner.intern(key); } @@ -143,7 +143,7 @@ public SkyFunctionName functionName() { } @Override - public SkyKeyInterner getSkyKeyInterner() { + public SkyKeyInterner getSkyKeyInterner() { return interner; } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlmodRepoRuleFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlmodRepoRuleFunction.java index 43920ec162e983..850bf379914f9b 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlmodRepoRuleFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlmodRepoRuleFunction.java @@ -133,17 +133,17 @@ public SkyValue compute(SkyKey skyKey, Environment env) return BzlmodRepoRuleValue.REPO_RULE_NOT_FOUND_VALUE; } - SingleExtensionValue extensionEval = + SingleExtensionValue extensionValue = (SingleExtensionValue) env.getValue(SingleExtensionValue.key(extensionId.get())); - if (extensionEval == null) { + if (extensionValue == null) { return null; } - String internalRepo = extensionEval.getCanonicalRepoNameToInternalNames().get(repositoryName); + String internalRepo = extensionValue.getCanonicalRepoNameToInternalNames().get(repositoryName); if (internalRepo == null) { return BzlmodRepoRuleValue.REPO_RULE_NOT_FOUND_VALUE; } - RepoSpec extRepoSpec = extensionEval.getGeneratedRepoSpecs().get(internalRepo); + RepoSpec extRepoSpec = extensionValue.getGeneratedRepoSpecs().get(internalRepo); return createRuleFromSpec(extRepoSpec, repositoryName, starlarkSemantics, env); } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingValue.java index cf2f35af411625..8e38bba78feef0 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingValue.java @@ -15,7 +15,6 @@ package com.google.devtools.build.lib.skyframe; import com.google.auto.value.AutoValue; -import com.google.common.annotations.VisibleForTesting; import com.google.devtools.build.lib.bazel.bzlmod.Version; import com.google.devtools.build.lib.cmdline.RepositoryMapping; import com.google.devtools.build.lib.cmdline.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 f483208d39171c..033809908fac73 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 @@ -216,7 +216,7 @@ protected MemoizingEvaluator createEvaluator( progressReceiver, inconsistencyReceiver, trackIncrementalState - ? (shouldStoreTransitivePackagesInLoadingAndAnalysis() + ? (externalRepositoriesEnabled() ? DEFAULT_EVENT_FILTER_WITH_ACTIONS_AND_EXTERNAL_REPOS : DEFAULT_EVENT_FILTER_WITH_ACTIONS) : EventFilter.NO_STORAGE, 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 b2011622e898fe..49d878e1955015 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 @@ -1161,7 +1161,11 @@ public Root getForcedSingleSourceRootIfNoExecrootSymlinkCreation() { return null; } - protected boolean shouldStoreTransitivePackagesInLoadingAndAnalysis() { + final boolean externalRepositoriesEnabled() { + return shouldStoreTransitivePackagesInLoadingAndAnalysis(); + } + + private boolean shouldStoreTransitivePackagesInLoadingAndAnalysis() { // Transitive packages may be needed for either RepoMappingManifestAction or Skymeld with // external repository support. They are never needed if external repositories are disabled. To // avoid complexity from toggling this, just choose a setting for the lifetime of the server. diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionResolutionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionResolutionTest.java index 1a25627cbb2643..63b7ca202ef173 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionResolutionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionResolutionTest.java @@ -1913,7 +1913,7 @@ public void extensionMetadata() throws Exception { evaluator .getDoneValues() .get( - SingleExtensionValue.unvalidatedKey( + SingleExtensionValue.evalKey( ModuleExtensionId.create( Label.parseCanonical("@@ext~//:defs.bzl"), "ext", Optional.empty()))); assertThat(evalValue.getFixup()).isPresent(); @@ -2005,7 +2005,7 @@ public void extensionMetadata_all() throws Exception { evaluator .getDoneValues() .get( - SingleExtensionValue.unvalidatedKey( + SingleExtensionValue.evalKey( ModuleExtensionId.create( Label.parseCanonical("@@ext~//:defs.bzl"), "ext", Optional.empty()))); assertThat(evalValue.getFixup()).isPresent(); @@ -2099,7 +2099,7 @@ public void extensionMetadata_allDev() throws Exception { evaluator .getDoneValues() .get( - SingleExtensionValue.unvalidatedKey( + SingleExtensionValue.evalKey( ModuleExtensionId.create( Label.parseCanonical("@@ext~//:defs.bzl"), "ext", Optional.empty()))); assertThat(evalValue.getFixup()).isPresent(); @@ -2162,7 +2162,7 @@ public void extensionMetadata_noRootUsage() throws Exception { evaluator .getDoneValues() .get( - SingleExtensionValue.unvalidatedKey( + SingleExtensionValue.evalKey( ModuleExtensionId.create( Label.parseCanonical("@@ext~//:defs.bzl"), "ext", Optional.empty()))); assertThat(evalValue.getFixup()).isEmpty(); @@ -2248,7 +2248,7 @@ public void extensionMetadata_isolated() throws Exception { evaluator .getDoneValues() .get( - SingleExtensionValue.unvalidatedKey( + SingleExtensionValue.evalKey( ModuleExtensionId.create( Label.parseCanonical("@@ext~//:defs.bzl"), "ext", @@ -2265,7 +2265,7 @@ public void extensionMetadata_isolated() throws Exception { evaluator .getDoneValues() .get( - SingleExtensionValue.unvalidatedKey( + SingleExtensionValue.evalKey( ModuleExtensionId.create( Label.parseCanonical("@@ext~//:defs.bzl"), "ext", @@ -2358,7 +2358,7 @@ public void extensionMetadata_isolatedDev() throws Exception { evaluator .getDoneValues() .get( - SingleExtensionValue.unvalidatedKey( + SingleExtensionValue.evalKey( ModuleExtensionId.create( Label.parseCanonical("@@ext~//:defs.bzl"), "ext", @@ -2375,7 +2375,7 @@ public void extensionMetadata_isolatedDev() throws Exception { evaluator .getDoneValues() .get( - SingleExtensionValue.unvalidatedKey( + SingleExtensionValue.evalKey( ModuleExtensionId.create( Label.parseCanonical("@@ext~//:defs.bzl"), "ext",