diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 8b9abfaf3f2ee9..2b8ffa5cbd66bb 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -2917,7 +2917,7 @@ "bzlTransitiveDigest": "tunTSmgwd2uvTzkCLtdbuCp0AI+WR+ftiPNqZ0rmcZk=", "recordedFileInputs": { "@@//MODULE.bazel": "939a48e4dbb71472db80f16a6a639f65cb4ddb07d8e1fd01db14cf1d0323917d", - "@@//src/test/tools/bzlmod/MODULE.bazel.lock": "547b1ca7af37ca0b4e7c7de36093d66b81d46440b58b41c76fe9d6df3af9ea52" + "@@//src/test/tools/bzlmod/MODULE.bazel.lock": "1fffc063b7830519a4f8ea2b8a1192fef8c4065e4f2e5a1aeedd4f563a5bc683" }, "recordedDirentsInputs": {}, "envVariables": {}, diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunction.java index 7b11bd8507c109..a8aaeb2df53f75 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunction.java @@ -237,13 +237,13 @@ static BzlmodFlagsAndEnvVars getFlagsAndEnvVars(Environment env) throws Interrup Code.BAD_MODULE, e, "invalid label for module extension found at %s", - usage.getLocation()); + usage.getProxies().getFirst().getLocation()); } if (!moduleExtensionId.getBzlFileLabel().getRepository().isVisible()) { throw ExternalDepsException.withMessage( Code.BAD_MODULE, "invalid label for module extension found at %s: no repo visible as '@%s' here", - usage.getLocation(), + usage.getProxies().getFirst().getLocation(), moduleExtensionId.getBzlFileLabel().getRepository().getName()); } extensionUsagesTableBuilder.put(moduleExtensionId, module.getKey(), usage); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphValue.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphValue.java index 1a5a9e1b0ead4b..6fb4c98bf8432c 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphValue.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphValue.java @@ -118,14 +118,16 @@ public static BazelDepGraphValue createEmptyDepGraph() { */ public final RepositoryMapping getFullRepoMapping(ModuleKey key) { ImmutableMap.Builder mapping = ImmutableMap.builder(); - for (Map.Entry e : + for (Map.Entry extIdAndUsage : getExtensionUsagesTable().column(key).entrySet()) { - ModuleExtensionId extensionId = e.getKey(); - ModuleExtensionUsage usage = e.getValue(); - for (Map.Entry entry : usage.getImports().entrySet()) { - String canonicalRepoName = - getExtensionUniqueNames().get(extensionId) + "~" + entry.getValue(); - mapping.put(entry.getKey(), RepositoryName.createUnvalidated(canonicalRepoName)); + ModuleExtensionId extensionId = extIdAndUsage.getKey(); + ModuleExtensionUsage usage = extIdAndUsage.getValue(); + String repoNamePrefix = getExtensionUniqueNames().get(extensionId) + "~"; + for (ModuleExtensionUsage.Proxy proxy : usage.getProxies()) { + for (Map.Entry entry : proxy.getImports().entrySet()) { + String canonicalRepoName = repoNamePrefix + entry.getValue(); + mapping.put(entry.getKey(), RepositoryName.createUnvalidated(canonicalRepoName)); + } } } return getDepGraph() diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileValue.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileValue.java index cd3eff788a8962..1593779740a83b 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileValue.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileValue.java @@ -39,7 +39,7 @@ @GenerateTypeAdapter public abstract class BazelLockFileValue implements SkyValue, Postable { - public static final int LOCK_FILE_VERSION = 8; + public static final int LOCK_FILE_VERSION = 9; @SerializationConstant public static final SkyKey KEY = () -> SkyFunctions.BAZEL_LOCK_FILE; diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionMetadata.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionMetadata.java index ebc1c05324672b..454c1ec8a81e38 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionMetadata.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionMetadata.java @@ -41,7 +41,6 @@ import net.starlark.java.eval.Starlark; import net.starlark.java.eval.StarlarkList; import net.starlark.java.eval.StarlarkValue; -import net.starlark.java.syntax.Location; /** The Starlark object passed to the implementation function of module extension metadata. */ @StarlarkBuiltin( @@ -219,15 +218,19 @@ private static Optional generateFixup( Set expectedImports, Set expectedDevImports, EventHandler eventHandler) { - var actualDevImports = ImmutableSet.copyOf(rootUsage.getDevImports()); + var actualDevImports = + rootUsage.getProxies().stream() + .filter(p -> p.isDevDependency()) + .flatMap(p -> p.getImports().values().stream()) + .collect(toImmutableSet()); var actualImports = - rootUsage.getImports().values().stream() - .filter(repo -> !actualDevImports.contains(repo)) + rootUsage.getProxies().stream() + .filter(p -> !p.isDevDependency()) + .flatMap(p -> p.getImports().values().stream()) .collect(toImmutableSet()); String extensionBzlFile = rootUsage.getExtensionBzlFile(); String extensionName = rootUsage.getExtensionName(); - Location location = rootUsage.getLocation(); var importsToAdd = ImmutableSortedSet.copyOf(Sets.difference(expectedImports, actualImports)); var importsToRemove = @@ -341,7 +344,7 @@ private static Optional generateFixup( .flatMap(Optional::stream) .collect(toImmutableList()); - eventHandler.handle(Event.warn(location, message)); + eventHandler.handle(Event.warn(rootUsage.getProxies().getFirst().getLocation(), message)); return Optional.of(new RootModuleFileFixup(buildozerCommands, rootUsage)); } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionUsage.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionUsage.java index 31657e5dee765d..2dbfd1620e353b 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionUsage.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionUsage.java @@ -17,17 +17,17 @@ import static com.google.common.collect.ImmutableList.toImmutableList; import com.google.auto.value.AutoValue; -import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableMap; import com.google.errorprone.annotations.CanIgnoreReturnValue; import com.ryanharter.auto.value.gson.GenerateTypeAdapter; import java.util.Optional; import net.starlark.java.syntax.Location; /** - * Represents one usage of a module extension in one MODULE.bazel file. This class records all the - * information pertinent to the proxy object returned from the {@code use_extension} call. + * Represents the usage of a module extension in one module. This class records all the information + * pertinent to all the proxy objects returned from any {@code use_extension} calls in this module + * that refer to the same extension (or isolate, when applicable). * *

When adding new fields, make sure to update {@link #trimForEvaluation()} as well. */ @@ -49,40 +49,80 @@ public abstract class ModuleExtensionUsage { /** The module that contains this particular extension usage. */ public abstract ModuleKey getUsingModule(); - /** - * The location where this proxy object was created (by the {@code use_extension} call). Note that - * if there were multiple {@code use_extension} calls on same extension, then this only stores the - * location of the first one. - */ - public abstract Location getLocation(); + /** Represents one "proxy object" returned from one {@code use_extension} call. */ + @AutoValue + @GenerateTypeAdapter + public abstract static class Proxy { + /** The location of the {@code use_extension} call. */ + public abstract Location getLocation(); + + /** + * The name of the proxy object; as in, the name that the return value of {@code use_extension} + * is bound to. Is the empty string if the return value is not bound to any name (e.g. {@code + * use_repo(use_extension(...))}). + */ + public abstract String getProxyName(); + + /** Whether {@code dev_dependency} is set to true. */ + public abstract boolean isDevDependency(); + + /** + * All the repos imported, through this proxy, from this module extension into the scope of the + * current module. The key is the local repo name (in the scope of the current module), and the + * value is the name exported by the module extension. + */ + public abstract ImmutableMap getImports(); + + public static Builder builder() { + return new AutoValue_ModuleExtensionUsage_Proxy.Builder().setProxyName(""); + } - /** - * All the repos imported from this module extension into the scope of the current module. The key - * is the local repo name (in the scope of the current module), and the value is the name exported - * by the module extension. - */ - public abstract ImmutableBiMap getImports(); + /** Builder for {@link ModuleExtensionUsage.Proxy}. */ + @AutoValue.Builder + public abstract static class Builder { + public abstract Builder setLocation(Location value); - /** - * The repo names as exported by the module extension that were imported using a proxy marked as a - * dev dependency. - */ - public abstract ImmutableSet getDevImports(); + public abstract String getProxyName(); + + public abstract Builder setProxyName(String value); + + public abstract boolean isDevDependency(); + + public abstract Builder setDevDependency(boolean value); + + abstract ImmutableMap.Builder importsBuilder(); + + @CanIgnoreReturnValue + public final Builder addImport(String key, String value) { + importsBuilder().put(key, value); + return this; + } + + public abstract Builder setImports(ImmutableMap value); + + public abstract Proxy build(); + } + } + + /** The list of proxy objects that constitute */ + public abstract ImmutableList getProxies(); /** All the tags specified by this module for this extension. */ public abstract ImmutableList getTags(); /** - * Whether any use_extension calls for this usage had dev_dependency = True - * set.* + * Whether any {@code use_extension} calls for this usage had {@code dev_dependency = True} set. */ - public abstract boolean getHasDevUseExtension(); + public final boolean getHasDevUseExtension() { + return getProxies().stream().anyMatch(p -> p.isDevDependency()); + } /** - * Whether any use_extension calls for this usage had dev_dependency = False - * set.* + * Whether any {@code use_extension} calls for this usage had {@code dev_dependency = False} set. */ - public abstract boolean getHasNonDevUseExtension(); + public final boolean getHasNonDevUseExtension() { + return getProxies().stream().anyMatch(p -> !p.isDevDependency()); + } public abstract Builder toBuilder(); @@ -100,13 +140,12 @@ ModuleExtensionUsage trimForEvaluation() { // preserves correctness in case new fields are added without updating this code. return toBuilder() .setTags(getTags().stream().map(Tag::trimForEvaluation).collect(toImmutableList())) + // Clear out all proxies as information contained therein isn't useful for evaluation. // Locations are only used for error reporting and thus don't influence whether the // evaluation of the extension is successful and what its result is in case of success. - .setLocation(Location.BUILTIN) // Extension implementation functions do not see the imports, they are only validated // against the set of generated repos in a validation step that comes afterward. - .setImports(ImmutableBiMap.of()) - .setDevImports(ImmutableSet.of()) + .setProxies(ImmutableList.of()) .build(); } @@ -122,26 +161,26 @@ public abstract static class Builder { public abstract Builder setUsingModule(ModuleKey value); - public abstract Builder setLocation(Location value); + public abstract Builder setProxies(ImmutableList value); - public abstract Builder setImports(ImmutableBiMap value); + abstract ImmutableList.Builder proxiesBuilder(); - public abstract Builder setDevImports(ImmutableSet value); + @CanIgnoreReturnValue + public Builder addProxy(Proxy value) { + proxiesBuilder().add(value); + return this; + } public abstract Builder setTags(ImmutableList value); abstract ImmutableList.Builder tagsBuilder(); @CanIgnoreReturnValue - public ModuleExtensionUsage.Builder addTag(Tag value) { + public Builder addTag(Tag value) { tagsBuilder().add(value); return this; } - public abstract Builder setHasDevUseExtension(boolean hasDevUseExtension); - - public abstract Builder setHasNonDevUseExtension(boolean hasNonDevUseExtension); - public abstract ModuleExtensionUsage build(); } } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunction.java index 65f8d9946f49bb..8ba2151744f1f5 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunction.java @@ -445,13 +445,14 @@ public static RootModuleFileValue evaluateRootModuleFile( throw errorf(Code.BAD_MODULE, "error executing MODULE.bazel file for the root module"); } for (ModuleExtensionUsage usage : module.getExtensionUsages()) { - if (usage.getIsolationKey().isPresent() && usage.getImports().isEmpty()) { + ModuleExtensionUsage.Proxy firstProxy = usage.getProxies().getFirst(); + if (usage.getIsolationKey().isPresent() && firstProxy.getImports().isEmpty()) { throw errorf( Code.BAD_MODULE, "the isolated usage at %s of extension %s defined in %s has no effect as no " + "repositories are imported from it. Either import one or more repositories " + "generated by the extension with use_repo or remove the usage.", - usage.getLocation(), + firstProxy.getLocation(), usage.getExtensionName(), usage.getExtensionBzlFile()); } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileGlobals.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileGlobals.java index efc449178f9584..abc4dda3d3dec5 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileGlobals.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileGlobals.java @@ -441,14 +441,18 @@ public ModuleExtensionProxy useExtension( "innate extensions cannot be directly used; try `use_repo_rule` instead"); } + var proxyBuilder = + ModuleExtensionUsage.Proxy.builder() + .setLocation(thread.getCallerLocation()) + .setDevDependency(devDependency); + String extensionBzlFile = normalizeLabelString(context.getModuleBuilder(), rawExtensionBzlFile); - ModuleExtensionUsageBuilder newUsageBuilder = - new ModuleExtensionUsageBuilder( - context, extensionBzlFile, extensionName, isolate, thread.getCallerLocation()); + var newUsageBuilder = + new ModuleExtensionUsageBuilder(context, extensionBzlFile, extensionName, isolate); if (context.shouldIgnoreDevDeps() && devDependency) { // This is a no-op proxy. - return ModuleExtensionProxy.createFromUsagesBuilder(newUsageBuilder, devDependency); + return new ModuleExtensionProxy(newUsageBuilder, proxyBuilder); } // Find an existing usage builder corresponding to this extension. Isolated usages need to get @@ -456,14 +460,14 @@ public ModuleExtensionProxy useExtension( if (!isolate) { for (ModuleExtensionUsageBuilder usageBuilder : context.getExtensionUsageBuilders()) { if (usageBuilder.isForExtension(extensionBzlFile, extensionName)) { - return ModuleExtensionProxy.createFromUsagesBuilder(usageBuilder, devDependency); + return new ModuleExtensionProxy(usageBuilder, proxyBuilder); } } } // If no such proxy exists, we can just use a new one. context.getExtensionUsageBuilders().add(newUsageBuilder); - return ModuleExtensionProxy.createFromUsagesBuilder(newUsageBuilder, devDependency); + return new ModuleExtensionProxy(newUsageBuilder, proxyBuilder); } private String normalizeLabelString(InterimModule.Builder module, String rawExtensionBzlFile) { @@ -520,30 +524,19 @@ private Object parseOverrideLabelAttribute(InterimModule.Builder module, String @StarlarkBuiltin(name = "module_extension_proxy", documented = false) static class ModuleExtensionProxy implements Structure, StarlarkExportable { private final ModuleExtensionUsageBuilder usageBuilder; - private final boolean devDependency; - - /** - * Creates a proxy with the specified dev_dependency bit that shares accumulated imports and - * tags with all other such proxies, thus preserving their order across dev/non-dev deps. - */ - static ModuleExtensionProxy createFromUsagesBuilder( - ModuleExtensionUsageBuilder usageBuilder, boolean devDependency) { - if (devDependency) { - usageBuilder.setHasDevUseExtension(); - } else { - usageBuilder.setHasNonDevUseExtension(); - } - return new ModuleExtensionProxy(usageBuilder, devDependency); - } + private final ModuleExtensionUsage.Proxy.Builder proxyBuilder; - private ModuleExtensionProxy(ModuleExtensionUsageBuilder usageBuilder, boolean devDependency) { + ModuleExtensionProxy( + ModuleExtensionUsageBuilder usageBuilder, ModuleExtensionUsage.Proxy.Builder proxyBuilder) { this.usageBuilder = usageBuilder; - this.devDependency = devDependency; + this.proxyBuilder = proxyBuilder; + usageBuilder.addProxyBuilder(proxyBuilder); } void addImport(String localRepoName, String exportedName, String byWhat, Location location) throws EvalException { - usageBuilder.addImport(localRepoName, exportedName, devDependency, byWhat, location); + usageBuilder.addImport(localRepoName, exportedName, byWhat, location); + proxyBuilder.addImport(localRepoName, exportedName); } class TagCallable implements StarlarkValue { @@ -564,7 +557,7 @@ public void call(Dict kwargs, StarlarkThread thread) { Tag.builder() .setTagName(tagName) .setAttributeValues(AttributeValues.create(kwargs)) - .setDevDependency(devDependency) + .setDevDependency(proxyBuilder.isDevDependency()) .setLocation(thread.getCallerLocation()) .build()); } @@ -588,12 +581,12 @@ public String getErrorMessageForUnknownField(String field) { @Override public boolean isExported() { - return usageBuilder.isExported(); + return !proxyBuilder.getProxyName().isEmpty(); } @Override public void export(EventHandler handler, Label bzlFileLabel, String name) { - usageBuilder.setExportedName(name); + proxyBuilder.setProxyName(name); } } @@ -659,15 +652,13 @@ public RepoRuleProxy useRepoRule(String bzlFile, String ruleName, StarlarkThread throws EvalException { ModuleThreadContext context = ModuleThreadContext.fromOrFail(thread, "use_repo_rule()"); context.setNonModuleCalled(); - // The builder for the singular "innate" extension of this module. Note that there's only one - // such usage (and it's fabricated), so the usage location just points to this file. + // The builder for the singular "innate" extension of this module. ModuleExtensionUsageBuilder newUsageBuilder = new ModuleExtensionUsageBuilder( context, "//:MODULE.bazel", ModuleExtensionId.INNATE_EXTENSION_NAME, - /* isolate= */ false, - Location.fromFile(thread.getCallerLocation().file())); + /* isolate= */ false); for (ModuleExtensionUsageBuilder usageBuilder : context.getExtensionUsageBuilders()) { if (usageBuilder.isForExtension("//:MODULE.bazel", ModuleExtensionId.INNATE_EXTENSION_NAME)) { return new RepoRuleProxy(usageBuilder, bzlFile + '%' + ruleName); @@ -706,7 +697,11 @@ public void call( } kwargs.putEntry("name", name); ModuleExtensionProxy extensionProxy = - ModuleExtensionProxy.createFromUsagesBuilder(usageBuilder, devDependency); + new ModuleExtensionProxy( + usageBuilder, + ModuleExtensionUsage.Proxy.builder() + .setDevDependency(devDependency) + .setLocation(thread.getCallerLocation())); extensionProxy.getValue(tagName).call(kwargs, thread); extensionProxy.addImport(name, name, "by a repo rule", thread.getCallerLocation()); } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleThreadContext.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleThreadContext.java index 8126ffc3ea00ef..ed70e57f7fdb81 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleThreadContext.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleThreadContext.java @@ -15,11 +15,12 @@ package com.google.devtools.build.lib.bazel.bzlmod; +import static com.google.common.collect.ImmutableList.toImmutableList; + import com.google.common.collect.HashBiMap; -import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; import com.google.devtools.build.lib.bazel.bzlmod.InterimModule.DepSpec; import com.google.devtools.build.lib.cmdline.RepositoryName; import java.util.ArrayList; @@ -121,28 +122,21 @@ static class ModuleExtensionUsageBuilder { private final String extensionBzlFile; private final String extensionName; private final boolean isolate; - private final Location location; + private final ArrayList proxyBuilders; private final HashBiMap imports; - private final ImmutableSet.Builder devImports; private final ImmutableList.Builder tags; - private boolean hasNonDevUseExtension; - private boolean hasDevUseExtension; - private String exportedName; - ModuleExtensionUsageBuilder( ModuleThreadContext context, String extensionBzlFile, String extensionName, - boolean isolate, - Location location) { + boolean isolate) { this.context = context; this.extensionBzlFile = extensionBzlFile; this.extensionName = extensionName; this.isolate = isolate; - this.location = location; + this.proxyBuilders = new ArrayList<>(); this.imports = HashBiMap.create(); - this.devImports = ImmutableSet.builder(); this.tags = ImmutableList.builder(); } @@ -150,20 +144,8 @@ ModuleThreadContext getContext() { return context; } - void setHasNonDevUseExtension() { - hasNonDevUseExtension = true; - } - - void setHasDevUseExtension() { - hasDevUseExtension = true; - } - - void setExportedName(String exportedName) { - this.exportedName = exportedName; - } - - boolean isExported() { - return exportedName != null; + void addProxyBuilder(ModuleExtensionUsage.Proxy.Builder builder) { + proxyBuilders.add(builder); } boolean isForExtension(String extensionBzlFile, String extensionName) { @@ -175,7 +157,6 @@ boolean isForExtension(String extensionBzlFile, String extensionName) { void addImport( String localRepoName, String exportedName, - boolean devDependency, String byWhat, Location location) throws EvalException { @@ -189,9 +170,6 @@ void addImport( exportedName, extensionName, context.repoNameUsages.get(collisionRepoName).where()); } imports.put(localRepoName, exportedName); - if (devDependency) { - devImports.add(exportedName); - } } void addTag(Tag tag) { @@ -199,26 +177,25 @@ void addTag(Tag tag) { } ModuleExtensionUsage buildUsage() throws EvalException { + var proxies = proxyBuilders.stream().map(p -> p.build()).collect(toImmutableList()); var builder = ModuleExtensionUsage.builder() .setExtensionBzlFile(extensionBzlFile) .setExtensionName(extensionName) .setUsingModule(context.getModuleBuilder().getKey()) - .setLocation(location) - .setImports(ImmutableBiMap.copyOf(imports)) - .setDevImports(devImports.build()) - .setHasDevUseExtension(hasDevUseExtension) - .setHasNonDevUseExtension(hasNonDevUseExtension) + .setProxies(proxies) .setTags(tags.build()); if (isolate) { - if (exportedName == null) { + ModuleExtensionUsage.Proxy onlyProxy = Iterables.getOnlyElement(proxies); + if (onlyProxy.getProxyName().isEmpty()) { throw Starlark.errorf( - "Isolated extension usage at %s must be assigned to a top-level variable", location); + "Isolated extension usage at %s must be assigned to a top-level variable", + onlyProxy.getLocation()); } builder.setIsolationKey( Optional.of( ModuleExtensionId.IsolationKey.create( - context.getModuleBuilder().getKey(), exportedName))); + context.getModuleBuilder().getKey(), onlyProxy.getProxyName()))); } else { builder.setIsolationKey(Optional.empty()); } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionEvalFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionEvalFunction.java index 93c1046c98d2b6..36c192cc5a1a4c 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionEvalFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionEvalFunction.java @@ -770,8 +770,8 @@ private RegularRunnableExtension loadRegularRunnableExtension( StarlarkSemantics starlarkSemantics, Environment env) throws InterruptedException, SingleExtensionEvalFunctionException { - Location sampleUsageLocation = - usagesValue.getExtensionUsages().values().iterator().next().getLocation(); + ModuleExtensionUsage sampleUsage = usagesValue.getExtensionUsages().values().iterator().next(); + Location sampleUsageLocation = sampleUsage.getProxies().getFirst().getLocation(); BzlLoadValue bzlLoadValue = loadBzlFile(extensionId.getBzlFileLabel(), sampleUsageLocation, starlarkSemantics, env); if (bzlLoadValue == null) { 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 a1f406063abf42..d0a8e98c8dc51d 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 @@ -50,21 +50,23 @@ public SkyValue compute(SkyKey skyKey, Environment env) // Check that all imported repos have actually been generated. for (ModuleExtensionUsage usage : usagesValue.getExtensionUsages().values()) { - for (Entry repoImport : usage.getImports().entrySet()) { - if (!evalOnlyValue.getGeneratedRepoSpecs().containsKey(repoImport.getValue())) { - throw new SingleExtensionFunctionException( - ExternalDepsException.withMessage( - Code.INVALID_EXTENSION_IMPORT, - "module extension \"%s\" from \"%s\" does not generate repository \"%s\", yet it" - + " is imported as \"%s\" in the usage at %s%s", - extensionId.getExtensionName(), - extensionId.getBzlFileLabel(), - repoImport.getValue(), - repoImport.getKey(), - usage.getLocation(), - SpellChecker.didYouMean( - repoImport.getValue(), evalOnlyValue.getGeneratedRepoSpecs().keySet())), - Transience.PERSISTENT); + for (ModuleExtensionUsage.Proxy proxy : usage.getProxies()) { + for (Entry repoImport : proxy.getImports().entrySet()) { + if (!evalOnlyValue.getGeneratedRepoSpecs().containsKey(repoImport.getValue())) { + throw new SingleExtensionFunctionException( + ExternalDepsException.withMessage( + Code.INVALID_EXTENSION_IMPORT, + "module extension \"%s\" from \"%s\" does not generate repository \"%s\", yet" + + " it is imported as \"%s\" in the usage at %s%s", + extensionId.getExtensionName(), + extensionId.getBzlFileLabel(), + repoImport.getValue(), + repoImport.getKey(), + proxy.getLocation(), + SpellChecker.didYouMean( + repoImport.getValue(), evalOnlyValue.getGeneratedRepoSpecs().keySet())), + Transience.PERSISTENT); + } } } } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/modcommand/ModExecutor.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/modcommand/ModExecutor.java index 861d5d7bd600df..cd9b6921c674a4 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/modcommand/ModExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/modcommand/ModExecutor.java @@ -444,7 +444,9 @@ private MaybeCompleteSet colorReversePathsToRoot(MaybeCompleteSet repo : usage.getImports().entrySet()) { - printer.printf( - " %s,\n", - repo.getKey().equals(repo.getValue()) - ? String.format("\"%s\"", repo.getKey()) - : String.format("%s=\"%s\"", repo.getKey(), repo.getValue())); + for (ModuleExtensionUsage.Proxy proxy : usage.getProxies()) { + for (Entry repo : proxy.getImports().entrySet()) { + printer.printf( + " %s,\n", + repo.getKey().equals(repo.getValue()) + ? String.format("\"%s\"", repo.getKey()) + : String.format("%s=\"%s\"", repo.getKey(), repo.getValue())); + } } printer.printf(")\n\n"); } diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunctionTest.java index a8d61f8fa61ed5..a91d9024aab2eb 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelDepGraphFunctionTest.java @@ -217,12 +217,13 @@ private static ModuleExtensionUsage createModuleExtensionUsage( .setExtensionBzlFile(bzlFile) .setExtensionName(name) .setIsolationKey(Optional.empty()) - .setImports(importsBuilder.buildOrThrow()) - .setDevImports(ImmutableSet.of()) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setDevDependency(false) + .setLocation(Location.BUILTIN) + .setImports(importsBuilder.buildOrThrow()) + .build()) .setUsingModule(ModuleKey.ROOT) - .setLocation(Location.BUILTIN) - .setHasDevUseExtension(false) - .setHasNonDevUseExtension(true) .build(); } diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java index a83126a0e51751..2df7df78e112cd 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunctionTest.java @@ -753,13 +753,15 @@ public void testModuleExtensions_good() throws Exception { .setExtensionName("myext1") .setIsolationKey(Optional.empty()) .setUsingModule(myMod) - .setLocation( - Location.fromFileLineColumn( - "fake:0/modules/mymod/1.0/MODULE.bazel", 2, 23)) - .setImports(ImmutableBiMap.of("repo1", "repo1")) - .setDevImports(ImmutableSet.of()) - .setHasDevUseExtension(false) - .setHasNonDevUseExtension(true) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation( + Location.fromFileLineColumn( + "fake:0/modules/mymod/1.0/MODULE.bazel", 2, 23)) + .setDevDependency(false) + .setProxyName("myext1") + .setImports(ImmutableBiMap.of("repo1", "repo1")) + .build()) .addTag( Tag.builder() .setTagName("tag") @@ -780,13 +782,16 @@ public void testModuleExtensions_good() throws Exception { .setExtensionName("myext2") .setIsolationKey(Optional.empty()) .setUsingModule(myMod) - .setLocation( - Location.fromFileLineColumn( - "fake:0/modules/mymod/1.0/MODULE.bazel", 5, 23)) - .setImports(ImmutableBiMap.of("other_repo1", "repo1", "repo2", "repo2")) - .setDevImports(ImmutableSet.of()) - .setHasDevUseExtension(false) - .setHasNonDevUseExtension(true) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation( + Location.fromFileLineColumn( + "fake:0/modules/mymod/1.0/MODULE.bazel", 5, 23)) + .setDevDependency(false) + .setProxyName("myext2") + .setImports( + ImmutableBiMap.of("other_repo1", "repo1", "repo2", "repo2")) + .build()) .addTag( Tag.builder() .setTagName("tag1") @@ -820,14 +825,17 @@ public void testModuleExtensions_good() throws Exception { .setExtensionName("maven") .setIsolationKey(Optional.empty()) .setUsingModule(myMod) - .setLocation( - Location.fromFileLineColumn( - "fake:0/modules/mymod/1.0/MODULE.bazel", 10, 22)) - .setImports( - ImmutableBiMap.of("mvn", "maven", "junit", "junit", "guava", "guava")) - .setDevImports(ImmutableSet.of()) - .setHasDevUseExtension(false) - .setHasNonDevUseExtension(true) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation( + Location.fromFileLineColumn( + "fake:0/modules/mymod/1.0/MODULE.bazel", 10, 22)) + .setDevDependency(false) + .setProxyName("maven") + .setImports( + ImmutableBiMap.of( + "mvn", "maven", "junit", "junit", "guava", "guava")) + .build()) .addTag( Tag.builder() .setTagName("dep") @@ -893,14 +901,38 @@ public void testModuleExtensions_duplicateProxy_asRoot() throws Exception { .setExtensionName("myext") .setIsolationKey(Optional.empty()) .setUsingModule(ModuleKey.ROOT) - .setLocation(Location.fromFileLineColumn("/workspace/MODULE.bazel", 1, 23)) - .setImports( - ImmutableBiMap.of( - "alpha", "alpha", "beta", "beta", "gamma", "gamma", "delta", - "delta")) - .setDevImports(ImmutableSet.of("alpha", "gamma")) - .setHasDevUseExtension(true) - .setHasNonDevUseExtension(true) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation( + Location.fromFileLineColumn("/workspace/MODULE.bazel", 1, 23)) + .setDevDependency(true) + .setProxyName("myext1") + .addImport("alpha", "alpha") + .build()) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation( + Location.fromFileLineColumn("/workspace/MODULE.bazel", 4, 23)) + .setDevDependency(false) + .setProxyName("myext2") + .addImport("beta", "beta") + .build()) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation( + Location.fromFileLineColumn("/workspace/MODULE.bazel", 7, 23)) + .setDevDependency(true) + .setProxyName("myext3") + .addImport("gamma", "gamma") + .build()) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation( + Location.fromFileLineColumn("/workspace/MODULE.bazel", 10, 23)) + .setDevDependency(false) + .setProxyName("myext4") + .addImport("delta", "delta") + .build()) .addTag( Tag.builder() .setTagName("tag") @@ -993,13 +1025,24 @@ public void testModuleExtensions_duplicateProxy_asDep() throws Exception { .setExtensionName("myext") .setIsolationKey(Optional.empty()) .setUsingModule(myMod) - .setLocation( - Location.fromFileLineColumn( - "fake:0/modules/mymod/1.0/MODULE.bazel", 5, 23)) - .setImports(ImmutableBiMap.of("beta", "beta", "delta", "delta")) - .setDevImports(ImmutableSet.of()) - .setHasDevUseExtension(false) - .setHasNonDevUseExtension(true) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation( + Location.fromFileLineColumn( + "fake:0/modules/mymod/1.0/MODULE.bazel", 5, 23)) + .setDevDependency(false) + .setProxyName("myext2") + .addImport("beta", "beta") + .build()) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation( + Location.fromFileLineColumn( + "fake:0/modules/mymod/1.0/MODULE.bazel", 11, 23)) + .setDevDependency(false) + .setProxyName("myext4") + .addImport("delta", "delta") + .build()) .addTag( Tag.builder() .setTagName("tag") @@ -1098,13 +1141,27 @@ public void testModuleExtensions_innate() throws Exception { .setExtensionName("_repo_rules") .setIsolationKey(Optional.empty()) .setUsingModule(ModuleKey.ROOT) - .setLocation(Location.fromFile("/workspace/MODULE.bazel")) - .setImports( - ImmutableBiMap.of( - "repo_name", "repo_name", "guava", "guava", "vuaga", "vuaga")) - .setDevImports(ImmutableSet.of("vuaga")) - .setHasDevUseExtension(true) - .setHasNonDevUseExtension(true) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation( + Location.fromFileLineColumn("/workspace/MODULE.bazel", 2, 5)) + .setDevDependency(false) + .addImport("repo_name", "repo_name") + .build()) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation( + Location.fromFileLineColumn("/workspace/MODULE.bazel", 4, 13)) + .setDevDependency(false) + .addImport("guava", "guava") + .build()) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation( + Location.fromFileLineColumn("/workspace/MODULE.bazel", 5, 13)) + .setDevDependency(true) + .addImport("vuaga", "vuaga") + .build()) .addTag( Tag.builder() .setTagName("//:repo.bzl%repo") diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/StarlarkBazelModuleTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/StarlarkBazelModuleTest.java index fd3fc4b2aecbc6..b1c8030627263a 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/StarlarkBazelModuleTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/StarlarkBazelModuleTest.java @@ -23,10 +23,8 @@ import static com.google.devtools.build.lib.packages.Attribute.attr; import static org.junit.Assert.assertThrows; -import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.Type; @@ -49,12 +47,7 @@ private static ModuleExtensionUsage.Builder getBaseUsageBuilder() { .setExtensionBzlFile("//:rje.bzl") .setExtensionName("maven") .setIsolationKey(Optional.empty()) - .setUsingModule(ModuleKey.ROOT) - .setLocation(Location.BUILTIN) - .setImports(ImmutableBiMap.of()) - .setDevImports(ImmutableSet.of()) - .setHasDevUseExtension(false) - .setHasNonDevUseExtension(true); + .setUsingModule(ModuleKey.ROOT); } /** A builder for ModuleExtension that sets all the mandatory but irrelevant fields. */ diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/modcommand/ModExecutorTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/modcommand/ModExecutorTest.java index ab89f4a6f98891..c8d9518387dcb2 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/modcommand/ModExecutorTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/modcommand/ModExecutorTest.java @@ -606,12 +606,13 @@ public void testExtensionsInfoTextAndGraph() throws Exception { ModuleExtensionUsage.builder() .setExtensionBzlFile("//extensions:extensions.bzl") .setExtensionName("maven") - .setLocation(Location.fromFileLineColumn("C@1.0/MODULE.bazel", 2, 23)) - .setImports(ImmutableBiMap.of("repo1", "repo1", "repo3", "repo3")) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation(Location.fromFileLineColumn("C@1.0/MODULE.bazel", 2, 23)) + .setImports(ImmutableBiMap.of("repo1", "repo1", "repo3", "repo3")) + .setDevDependency(false) + .build()) .setUsingModule(createModuleKey("C", "1.0")) - .setDevImports(ImmutableSet.of()) - .setHasDevUseExtension(false) - .setHasNonDevUseExtension(true) .build()) .put( mavenId, @@ -619,12 +620,13 @@ public void testExtensionsInfoTextAndGraph() throws Exception { ModuleExtensionUsage.builder() .setExtensionBzlFile("//extensions:extensions.bzl") .setExtensionName("maven") - .setLocation(Location.fromFileLineColumn("D@1.0/MODULE.bazel", 1, 10)) - .setImports(ImmutableBiMap.of("repo1", "repo1", "repo2", "repo2")) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation(Location.fromFileLineColumn("D@1.0/MODULE.bazel", 1, 10)) + .setImports(ImmutableBiMap.of("repo1", "repo1", "repo2", "repo2")) + .setDevDependency(false) + .build()) .setUsingModule(createModuleKey("D", "1.0")) - .setDevImports(ImmutableSet.of()) - .setHasDevUseExtension(false) - .setHasNonDevUseExtension(true) .build()) .put( gradleId, @@ -632,12 +634,13 @@ public void testExtensionsInfoTextAndGraph() throws Exception { ModuleExtensionUsage.builder() .setExtensionBzlFile("//extensions:extensions.bzl") .setExtensionName("gradle") - .setLocation(Location.fromFileLineColumn("Y@2.0/MODULE.bazel", 2, 13)) - .setImports(ImmutableBiMap.of("repo2", "repo2")) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation(Location.fromFileLineColumn("Y@2.0/MODULE.bazel", 2, 13)) + .setImports(ImmutableBiMap.of("repo2", "repo2")) + .setDevDependency(false) + .build()) .setUsingModule(createModuleKey("Y", "2.0")) - .setDevImports(ImmutableSet.of()) - .setHasDevUseExtension(false) - .setHasNonDevUseExtension(true) .build()) .put( mavenId, @@ -645,8 +648,12 @@ public void testExtensionsInfoTextAndGraph() throws Exception { ModuleExtensionUsage.builder() .setExtensionBzlFile("//extensions:extensions.bzl") .setExtensionName("maven") - .setLocation(Location.fromFileLineColumn("Y@2.0/MODULE.bazel", 13, 10)) - .setImports(ImmutableBiMap.of("myrepo", "repo5")) + .addProxy( + ModuleExtensionUsage.Proxy.builder() + .setLocation(Location.fromFileLineColumn("Y@2.0/MODULE.bazel", 13, 10)) + .setImports(ImmutableBiMap.of("myrepo", "repo5")) + .setDevDependency(false) + .build()) .addTag(buildTag("dep").addAttr("coord", "junit").build()) .addTag(buildTag("dep").addAttr("coord", "guava").build()) .addTag( @@ -656,9 +663,6 @@ public void testExtensionsInfoTextAndGraph() throws Exception { StarlarkList.immutableOf("//:pom.xml", "@bar//:pom.xml")) .build()) .setUsingModule(createModuleKey("Y", "2.0")) - .setDevImports(ImmutableSet.of()) - .setHasDevUseExtension(false) - .setHasNonDevUseExtension(true) .build()) .buildOrThrow(); diff --git a/src/test/py/bazel/bzlmod/bazel_lockfile_test.py b/src/test/py/bazel/bzlmod/bazel_lockfile_test.py index 6118fb8c2affbc..9e6ae20949b998 100644 --- a/src/test/py/bazel/bzlmod/bazel_lockfile_test.py +++ b/src/test/py/bazel/bzlmod/bazel_lockfile_test.py @@ -1540,7 +1540,9 @@ def testLockfileWithNoUserSpecificPath(self): lockfile = json.load(json_file) ss_dep = lockfile['moduleDepGraph']['ss@1.3-1'] remote_patches = ss_dep['repoSpec']['attributes']['remote_patches'] - ext_usage_location = ss_dep['extensionUsages'][0]['location']['file'] + ext_usage_location = ss_dep['extensionUsages'][0]['proxies'][0][ + 'location' + ]['file'] self.assertNotIn(self.my_registry.getURL(), ext_usage_location) self.assertIn('%workspace%', ext_usage_location) diff --git a/src/test/tools/bzlmod/MODULE.bazel.lock b/src/test/tools/bzlmod/MODULE.bazel.lock index 43fb80ed1b9c9a..625916c7f78f97 100644 --- a/src/test/tools/bzlmod/MODULE.bazel.lock +++ b/src/test/tools/bzlmod/MODULE.bazel.lock @@ -1,5 +1,5 @@ { - "lockFileVersion": 8, + "lockFileVersion": 9, "moduleFileHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "flags": { "cmdRegistries": [ @@ -44,144 +44,168 @@ "extensionBzlFile": "@bazel_tools//tools/cpp:cc_configure.bzl", "extensionName": "cc_configure_extension", "usingModule": "bazel_tools@_", - "location": { - "file": "@@bazel_tools//:MODULE.bazel", - "line": 18, - "column": 29 - }, - "imports": { - "local_config_cc": "local_config_cc", - "local_config_cc_toolchains": "local_config_cc_toolchains" - }, - "devImports": [], - "tags": [], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + "proxies": [ + { + "location": { + "file": "@@bazel_tools//:MODULE.bazel", + "line": 18, + "column": 29 + }, + "proxyName": "cc_configure", + "devDependency": false, + "imports": { + "local_config_cc": "local_config_cc", + "local_config_cc_toolchains": "local_config_cc_toolchains" + } + } + ], + "tags": [] }, { "extensionBzlFile": "@bazel_tools//tools/osx:xcode_configure.bzl", "extensionName": "xcode_configure_extension", "usingModule": "bazel_tools@_", - "location": { - "file": "@@bazel_tools//:MODULE.bazel", - "line": 22, - "column": 32 - }, - "imports": { - "local_config_xcode": "local_config_xcode" - }, - "devImports": [], - "tags": [], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + "proxies": [ + { + "location": { + "file": "@@bazel_tools//:MODULE.bazel", + "line": 22, + "column": 32 + }, + "proxyName": "xcode_configure", + "devDependency": false, + "imports": { + "local_config_xcode": "local_config_xcode" + } + } + ], + "tags": [] }, { "extensionBzlFile": "@rules_java//java:extensions.bzl", "extensionName": "toolchains", "usingModule": "bazel_tools@_", - "location": { - "file": "@@bazel_tools//:MODULE.bazel", - "line": 25, - "column": 32 - }, - "imports": { - "local_jdk": "local_jdk", - "remote_java_tools": "remote_java_tools", - "remote_java_tools_linux": "remote_java_tools_linux", - "remote_java_tools_windows": "remote_java_tools_windows", - "remote_java_tools_darwin_x86_64": "remote_java_tools_darwin_x86_64", - "remote_java_tools_darwin_arm64": "remote_java_tools_darwin_arm64" - }, - "devImports": [], - "tags": [], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + "proxies": [ + { + "location": { + "file": "@@bazel_tools//:MODULE.bazel", + "line": 25, + "column": 32 + }, + "proxyName": "java_toolchains", + "devDependency": false, + "imports": { + "local_jdk": "local_jdk", + "remote_java_tools": "remote_java_tools", + "remote_java_tools_linux": "remote_java_tools_linux", + "remote_java_tools_windows": "remote_java_tools_windows", + "remote_java_tools_darwin_x86_64": "remote_java_tools_darwin_x86_64", + "remote_java_tools_darwin_arm64": "remote_java_tools_darwin_arm64" + } + } + ], + "tags": [] }, { "extensionBzlFile": "@bazel_tools//tools/sh:sh_configure.bzl", "extensionName": "sh_configure_extension", "usingModule": "bazel_tools@_", - "location": { - "file": "@@bazel_tools//:MODULE.bazel", - "line": 36, - "column": 39 - }, - "imports": { - "local_config_sh": "local_config_sh" - }, - "devImports": [], - "tags": [], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + "proxies": [ + { + "location": { + "file": "@@bazel_tools//:MODULE.bazel", + "line": 36, + "column": 39 + }, + "proxyName": "sh_configure_extension", + "devDependency": false, + "imports": { + "local_config_sh": "local_config_sh" + } + } + ], + "tags": [] }, { "extensionBzlFile": "@bazel_tools//tools/test:extensions.bzl", "extensionName": "remote_coverage_tools_extension", "usingModule": "bazel_tools@_", - "location": { - "file": "@@bazel_tools//:MODULE.bazel", - "line": 40, - "column": 48 - }, - "imports": { - "remote_coverage_tools": "remote_coverage_tools" - }, - "devImports": [], - "tags": [], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + "proxies": [ + { + "location": { + "file": "@@bazel_tools//:MODULE.bazel", + "line": 40, + "column": 48 + }, + "proxyName": "remote_coverage_tools_extension", + "devDependency": false, + "imports": { + "remote_coverage_tools": "remote_coverage_tools" + } + } + ], + "tags": [] }, { "extensionBzlFile": "@bazel_tools//tools/android:android_extensions.bzl", "extensionName": "remote_android_tools_extensions", "usingModule": "bazel_tools@_", - "location": { - "file": "@@bazel_tools//:MODULE.bazel", - "line": 43, - "column": 42 - }, - "imports": { - "android_gmaven_r8": "android_gmaven_r8", - "android_tools": "android_tools" - }, - "devImports": [], - "tags": [], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + "proxies": [ + { + "location": { + "file": "@@bazel_tools//:MODULE.bazel", + "line": 43, + "column": 42 + }, + "proxyName": "remote_android_extensions", + "devDependency": false, + "imports": { + "android_gmaven_r8": "android_gmaven_r8", + "android_tools": "android_tools" + } + } + ], + "tags": [] }, { "extensionBzlFile": "@bazel_tools//tools/android:android_extensions.bzl", "extensionName": "android_sdk_proxy_extensions", "usingModule": "bazel_tools@_", - "location": { - "file": "@@bazel_tools//:MODULE.bazel", - "line": 46, - "column": 45 - }, - "imports": { - "android_external": "android_external" - }, - "devImports": [], - "tags": [], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + "proxies": [ + { + "location": { + "file": "@@bazel_tools//:MODULE.bazel", + "line": 46, + "column": 45 + }, + "proxyName": "android_sdk_proxy_extensions", + "devDependency": false, + "imports": { + "android_external": "android_external" + } + } + ], + "tags": [] }, { "extensionBzlFile": "@buildozer//:buildozer_binary.bzl", "extensionName": "buildozer_binary", "usingModule": "bazel_tools@_", - "location": { - "file": "@@bazel_tools//:MODULE.bazel", - "line": 50, - "column": 33 - }, - "imports": { - "buildozer_binary": "buildozer_binary" - }, - "devImports": [], - "tags": [], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + "proxies": [ + { + "location": { + "file": "@@bazel_tools//:MODULE.bazel", + "line": 50, + "column": 33 + }, + "proxyName": "buildozer_binary", + "devDependency": false, + "imports": { + "buildozer_binary": "buildozer_binary" + } + } + ], + "tags": [] } ], "deps": { @@ -225,18 +249,21 @@ "extensionBzlFile": "@bazel_tools//tools/cpp:cc_configure.bzl", "extensionName": "cc_configure_extension", "usingModule": "rules_cc@0.0.9", - "location": { - "file": "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel", - "line": 9, - "column": 29 - }, - "imports": { - "local_config_cc_toolchains": "local_config_cc_toolchains" - }, - "devImports": [], - "tags": [], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + "proxies": [ + { + "location": { + "file": "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel", + "line": 9, + "column": 29 + }, + "proxyName": "cc_configure", + "devDependency": false, + "imports": { + "local_config_cc_toolchains": "local_config_cc_toolchains" + } + } + ], + "tags": [] } ], "deps": { @@ -300,47 +327,50 @@ "extensionBzlFile": "@rules_java//java:extensions.bzl", "extensionName": "toolchains", "usingModule": "rules_java@7.5.0", - "location": { - "file": "https://bcr.bazel.build/modules/rules_java/7.5.0/MODULE.bazel", - "line": 19, - "column": 27 - }, - "imports": { - "remote_java_tools": "remote_java_tools", - "remote_java_tools_linux": "remote_java_tools_linux", - "remote_java_tools_windows": "remote_java_tools_windows", - "remote_java_tools_darwin_x86_64": "remote_java_tools_darwin_x86_64", - "remote_java_tools_darwin_arm64": "remote_java_tools_darwin_arm64", - "local_jdk": "local_jdk", - "remotejdk11_linux_toolchain_config_repo": "remotejdk11_linux_toolchain_config_repo", - "remotejdk11_linux_aarch64_toolchain_config_repo": "remotejdk11_linux_aarch64_toolchain_config_repo", - "remotejdk11_linux_ppc64le_toolchain_config_repo": "remotejdk11_linux_ppc64le_toolchain_config_repo", - "remotejdk11_linux_s390x_toolchain_config_repo": "remotejdk11_linux_s390x_toolchain_config_repo", - "remotejdk11_macos_toolchain_config_repo": "remotejdk11_macos_toolchain_config_repo", - "remotejdk11_macos_aarch64_toolchain_config_repo": "remotejdk11_macos_aarch64_toolchain_config_repo", - "remotejdk11_win_toolchain_config_repo": "remotejdk11_win_toolchain_config_repo", - "remotejdk11_win_arm64_toolchain_config_repo": "remotejdk11_win_arm64_toolchain_config_repo", - "remotejdk17_linux_toolchain_config_repo": "remotejdk17_linux_toolchain_config_repo", - "remotejdk17_linux_aarch64_toolchain_config_repo": "remotejdk17_linux_aarch64_toolchain_config_repo", - "remotejdk17_linux_ppc64le_toolchain_config_repo": "remotejdk17_linux_ppc64le_toolchain_config_repo", - "remotejdk17_linux_s390x_toolchain_config_repo": "remotejdk17_linux_s390x_toolchain_config_repo", - "remotejdk17_macos_toolchain_config_repo": "remotejdk17_macos_toolchain_config_repo", - "remotejdk17_macos_aarch64_toolchain_config_repo": "remotejdk17_macos_aarch64_toolchain_config_repo", - "remotejdk17_win_toolchain_config_repo": "remotejdk17_win_toolchain_config_repo", - "remotejdk17_win_arm64_toolchain_config_repo": "remotejdk17_win_arm64_toolchain_config_repo", - "remotejdk21_linux_toolchain_config_repo": "remotejdk21_linux_toolchain_config_repo", - "remotejdk21_linux_aarch64_toolchain_config_repo": "remotejdk21_linux_aarch64_toolchain_config_repo", - "remotejdk21_linux_ppc64le_toolchain_config_repo": "remotejdk21_linux_ppc64le_toolchain_config_repo", - "remotejdk21_linux_s390x_toolchain_config_repo": "remotejdk21_linux_s390x_toolchain_config_repo", - "remotejdk21_macos_toolchain_config_repo": "remotejdk21_macos_toolchain_config_repo", - "remotejdk21_macos_aarch64_toolchain_config_repo": "remotejdk21_macos_aarch64_toolchain_config_repo", - "remotejdk21_win_toolchain_config_repo": "remotejdk21_win_toolchain_config_repo", - "remotejdk21_win_arm64_toolchain_config_repo": "remotejdk21_win_arm64_toolchain_config_repo" - }, - "devImports": [], - "tags": [], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + "proxies": [ + { + "location": { + "file": "https://bcr.bazel.build/modules/rules_java/7.5.0/MODULE.bazel", + "line": 19, + "column": 27 + }, + "proxyName": "toolchains", + "devDependency": false, + "imports": { + "remote_java_tools": "remote_java_tools", + "remote_java_tools_linux": "remote_java_tools_linux", + "remote_java_tools_windows": "remote_java_tools_windows", + "remote_java_tools_darwin_x86_64": "remote_java_tools_darwin_x86_64", + "remote_java_tools_darwin_arm64": "remote_java_tools_darwin_arm64", + "local_jdk": "local_jdk", + "remotejdk11_linux_toolchain_config_repo": "remotejdk11_linux_toolchain_config_repo", + "remotejdk11_linux_aarch64_toolchain_config_repo": "remotejdk11_linux_aarch64_toolchain_config_repo", + "remotejdk11_linux_ppc64le_toolchain_config_repo": "remotejdk11_linux_ppc64le_toolchain_config_repo", + "remotejdk11_linux_s390x_toolchain_config_repo": "remotejdk11_linux_s390x_toolchain_config_repo", + "remotejdk11_macos_toolchain_config_repo": "remotejdk11_macos_toolchain_config_repo", + "remotejdk11_macos_aarch64_toolchain_config_repo": "remotejdk11_macos_aarch64_toolchain_config_repo", + "remotejdk11_win_toolchain_config_repo": "remotejdk11_win_toolchain_config_repo", + "remotejdk11_win_arm64_toolchain_config_repo": "remotejdk11_win_arm64_toolchain_config_repo", + "remotejdk17_linux_toolchain_config_repo": "remotejdk17_linux_toolchain_config_repo", + "remotejdk17_linux_aarch64_toolchain_config_repo": "remotejdk17_linux_aarch64_toolchain_config_repo", + "remotejdk17_linux_ppc64le_toolchain_config_repo": "remotejdk17_linux_ppc64le_toolchain_config_repo", + "remotejdk17_linux_s390x_toolchain_config_repo": "remotejdk17_linux_s390x_toolchain_config_repo", + "remotejdk17_macos_toolchain_config_repo": "remotejdk17_macos_toolchain_config_repo", + "remotejdk17_macos_aarch64_toolchain_config_repo": "remotejdk17_macos_aarch64_toolchain_config_repo", + "remotejdk17_win_toolchain_config_repo": "remotejdk17_win_toolchain_config_repo", + "remotejdk17_win_arm64_toolchain_config_repo": "remotejdk17_win_arm64_toolchain_config_repo", + "remotejdk21_linux_toolchain_config_repo": "remotejdk21_linux_toolchain_config_repo", + "remotejdk21_linux_aarch64_toolchain_config_repo": "remotejdk21_linux_aarch64_toolchain_config_repo", + "remotejdk21_linux_ppc64le_toolchain_config_repo": "remotejdk21_linux_ppc64le_toolchain_config_repo", + "remotejdk21_linux_s390x_toolchain_config_repo": "remotejdk21_linux_s390x_toolchain_config_repo", + "remotejdk21_macos_toolchain_config_repo": "remotejdk21_macos_toolchain_config_repo", + "remotejdk21_macos_aarch64_toolchain_config_repo": "remotejdk21_macos_aarch64_toolchain_config_repo", + "remotejdk21_win_toolchain_config_repo": "remotejdk21_win_toolchain_config_repo", + "remotejdk21_win_arm64_toolchain_config_repo": "remotejdk21_win_arm64_toolchain_config_repo" + } + } + ], + "tags": [] } ], "deps": { @@ -435,43 +465,48 @@ "extensionBzlFile": "@rules_python//python/extensions/private:internal_deps.bzl", "extensionName": "internal_deps", "usingModule": "rules_python@0.22.1", - "location": { - "file": "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel", - "line": 14, - "column": 30 - }, - "imports": { - "pypi__build": "pypi__build", - "pypi__click": "pypi__click", - "pypi__colorama": "pypi__colorama", - "pypi__importlib_metadata": "pypi__importlib_metadata", - "pypi__installer": "pypi__installer", - "pypi__more_itertools": "pypi__more_itertools", - "pypi__packaging": "pypi__packaging", - "pypi__pep517": "pypi__pep517", - "pypi__pip": "pypi__pip", - "pypi__pip_tools": "pypi__pip_tools", - "pypi__setuptools": "pypi__setuptools", - "pypi__tomli": "pypi__tomli", - "pypi__wheel": "pypi__wheel", - "pypi__zipp": "pypi__zipp", - "pypi__coverage_cp310_aarch64-apple-darwin": "pypi__coverage_cp310_aarch64-apple-darwin", - "pypi__coverage_cp310_aarch64-unknown-linux-gnu": "pypi__coverage_cp310_aarch64-unknown-linux-gnu", - "pypi__coverage_cp310_x86_64-apple-darwin": "pypi__coverage_cp310_x86_64-apple-darwin", - "pypi__coverage_cp310_x86_64-unknown-linux-gnu": "pypi__coverage_cp310_x86_64-unknown-linux-gnu", - "pypi__coverage_cp311_aarch64-unknown-linux-gnu": "pypi__coverage_cp311_aarch64-unknown-linux-gnu", - "pypi__coverage_cp311_x86_64-apple-darwin": "pypi__coverage_cp311_x86_64-apple-darwin", - "pypi__coverage_cp311_x86_64-unknown-linux-gnu": "pypi__coverage_cp311_x86_64-unknown-linux-gnu", - "pypi__coverage_cp38_aarch64-apple-darwin": "pypi__coverage_cp38_aarch64-apple-darwin", - "pypi__coverage_cp38_aarch64-unknown-linux-gnu": "pypi__coverage_cp38_aarch64-unknown-linux-gnu", - "pypi__coverage_cp38_x86_64-apple-darwin": "pypi__coverage_cp38_x86_64-apple-darwin", - "pypi__coverage_cp38_x86_64-unknown-linux-gnu": "pypi__coverage_cp38_x86_64-unknown-linux-gnu", - "pypi__coverage_cp39_aarch64-apple-darwin": "pypi__coverage_cp39_aarch64-apple-darwin", - "pypi__coverage_cp39_aarch64-unknown-linux-gnu": "pypi__coverage_cp39_aarch64-unknown-linux-gnu", - "pypi__coverage_cp39_x86_64-apple-darwin": "pypi__coverage_cp39_x86_64-apple-darwin", - "pypi__coverage_cp39_x86_64-unknown-linux-gnu": "pypi__coverage_cp39_x86_64-unknown-linux-gnu" - }, - "devImports": [], + "proxies": [ + { + "location": { + "file": "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel", + "line": 14, + "column": 30 + }, + "proxyName": "internal_deps", + "devDependency": false, + "imports": { + "pypi__build": "pypi__build", + "pypi__click": "pypi__click", + "pypi__colorama": "pypi__colorama", + "pypi__importlib_metadata": "pypi__importlib_metadata", + "pypi__installer": "pypi__installer", + "pypi__more_itertools": "pypi__more_itertools", + "pypi__packaging": "pypi__packaging", + "pypi__pep517": "pypi__pep517", + "pypi__pip": "pypi__pip", + "pypi__pip_tools": "pypi__pip_tools", + "pypi__setuptools": "pypi__setuptools", + "pypi__tomli": "pypi__tomli", + "pypi__wheel": "pypi__wheel", + "pypi__zipp": "pypi__zipp", + "pypi__coverage_cp310_aarch64-apple-darwin": "pypi__coverage_cp310_aarch64-apple-darwin", + "pypi__coverage_cp310_aarch64-unknown-linux-gnu": "pypi__coverage_cp310_aarch64-unknown-linux-gnu", + "pypi__coverage_cp310_x86_64-apple-darwin": "pypi__coverage_cp310_x86_64-apple-darwin", + "pypi__coverage_cp310_x86_64-unknown-linux-gnu": "pypi__coverage_cp310_x86_64-unknown-linux-gnu", + "pypi__coverage_cp311_aarch64-unknown-linux-gnu": "pypi__coverage_cp311_aarch64-unknown-linux-gnu", + "pypi__coverage_cp311_x86_64-apple-darwin": "pypi__coverage_cp311_x86_64-apple-darwin", + "pypi__coverage_cp311_x86_64-unknown-linux-gnu": "pypi__coverage_cp311_x86_64-unknown-linux-gnu", + "pypi__coverage_cp38_aarch64-apple-darwin": "pypi__coverage_cp38_aarch64-apple-darwin", + "pypi__coverage_cp38_aarch64-unknown-linux-gnu": "pypi__coverage_cp38_aarch64-unknown-linux-gnu", + "pypi__coverage_cp38_x86_64-apple-darwin": "pypi__coverage_cp38_x86_64-apple-darwin", + "pypi__coverage_cp38_x86_64-unknown-linux-gnu": "pypi__coverage_cp38_x86_64-unknown-linux-gnu", + "pypi__coverage_cp39_aarch64-apple-darwin": "pypi__coverage_cp39_aarch64-apple-darwin", + "pypi__coverage_cp39_aarch64-unknown-linux-gnu": "pypi__coverage_cp39_aarch64-unknown-linux-gnu", + "pypi__coverage_cp39_x86_64-apple-darwin": "pypi__coverage_cp39_x86_64-apple-darwin", + "pypi__coverage_cp39_x86_64-unknown-linux-gnu": "pypi__coverage_cp39_x86_64-unknown-linux-gnu" + } + } + ], "tags": [ { "tagName": "install", @@ -483,26 +518,27 @@ "column": 22 } } - ], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + ] }, { "extensionBzlFile": "@rules_python//python/extensions:python.bzl", "extensionName": "python", "usingModule": "rules_python@0.22.1", - "location": { - "file": "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel", - "line": 50, - "column": 23 - }, - "imports": { - "pythons_hub": "pythons_hub" - }, - "devImports": [], - "tags": [], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + "proxies": [ + { + "location": { + "file": "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel", + "line": 50, + "column": 23 + }, + "proxyName": "python", + "devDependency": false, + "imports": { + "pythons_hub": "pythons_hub" + } + } + ], + "tags": [] } ], "deps": { @@ -541,15 +577,20 @@ "extensionBzlFile": "@buildozer//:buildozer_binary.bzl", "extensionName": "buildozer_binary", "usingModule": "buildozer@7.1.1.1", - "location": { - "file": "https://bcr.bazel.build/modules/buildozer/7.1.1.1/MODULE.bazel", - "line": 7, - "column": 33 - }, - "imports": { - "buildozer_binary": "buildozer_binary" - }, - "devImports": [], + "proxies": [ + { + "location": { + "file": "https://bcr.bazel.build/modules/buildozer/7.1.1.1/MODULE.bazel", + "line": 7, + "column": 33 + }, + "proxyName": "buildozer_binary", + "devDependency": false, + "imports": { + "buildozer_binary": "buildozer_binary" + } + } + ], "tags": [ { "tagName": "buildozer", @@ -570,9 +611,7 @@ "column": 27 } } - ], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + ] } ], "deps": { @@ -607,18 +646,21 @@ "extensionBzlFile": "@platforms//host:extension.bzl", "extensionName": "host_platform", "usingModule": "platforms@0.0.9", - "location": { - "file": "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel", - "line": 9, - "column": 30 - }, - "imports": { - "host_platform": "host_platform" - }, - "devImports": [], - "tags": [], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + "proxies": [ + { + "location": { + "file": "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel", + "line": 9, + "column": 30 + }, + "proxyName": "host_platform", + "devDependency": false, + "imports": { + "host_platform": "host_platform" + } + } + ], + "tags": [] } ], "deps": { @@ -652,15 +694,20 @@ "extensionBzlFile": "@rules_jvm_external//:extensions.bzl", "extensionName": "maven", "usingModule": "protobuf@21.7", - "location": { - "file": "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel", - "line": 22, - "column": 22 - }, - "imports": { - "maven": "maven" - }, - "devImports": [], + "proxies": [ + { + "location": { + "file": "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel", + "line": 22, + "column": 22 + }, + "proxyName": "maven", + "devDependency": false, + "imports": { + "maven": "maven" + } + } + ], "tags": [ { "tagName": "install", @@ -685,9 +732,7 @@ "column": 14 } } - ], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + ] } ], "deps": { @@ -769,19 +814,22 @@ "extensionBzlFile": "@build_bazel_apple_support//crosstool:setup.bzl", "extensionName": "apple_cc_configure_extension", "usingModule": "apple_support@1.5.0", - "location": { - "file": "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel", - "line": 17, - "column": 35 - }, - "imports": { - "local_config_apple_cc": "local_config_apple_cc", - "local_config_apple_cc_toolchains": "local_config_apple_cc_toolchains" - }, - "devImports": [], - "tags": [], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + "proxies": [ + { + "location": { + "file": "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel", + "line": 17, + "column": 35 + }, + "proxyName": "apple_cc_configure", + "devDependency": false, + "imports": { + "local_config_apple_cc": "local_config_apple_cc", + "local_config_apple_cc_toolchains": "local_config_apple_cc_toolchains" + } + } + ], + "tags": [] } ], "deps": { @@ -940,32 +988,40 @@ "extensionBzlFile": "@rules_jvm_external//:non-module-deps.bzl", "extensionName": "non_module_deps", "usingModule": "rules_jvm_external@4.4.2", - "location": { - "file": "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel", - "line": 9, - "column": 32 - }, - "imports": { - "io_bazel_rules_kotlin": "io_bazel_rules_kotlin" - }, - "devImports": [], - "tags": [], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + "proxies": [ + { + "location": { + "file": "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel", + "line": 9, + "column": 32 + }, + "proxyName": "non_module_deps", + "devDependency": false, + "imports": { + "io_bazel_rules_kotlin": "io_bazel_rules_kotlin" + } + } + ], + "tags": [] }, { "extensionBzlFile": "@rules_jvm_external//:extensions.bzl", "extensionName": "maven", "usingModule": "rules_jvm_external@4.4.2", - "location": { - "file": "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel", - "line": 16, - "column": 22 - }, - "imports": { - "rules_jvm_external_deps": "rules_jvm_external_deps" - }, - "devImports": [], + "proxies": [ + { + "location": { + "file": "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel", + "line": 16, + "column": 22 + }, + "proxyName": "maven", + "devDependency": false, + "imports": { + "rules_jvm_external_deps": "rules_jvm_external_deps" + } + } + ], "tags": [ { "tagName": "install", @@ -987,9 +1043,7 @@ "column": 14 } } - ], - "hasDevUseExtension": false, - "hasNonDevUseExtension": true + ] } ], "deps": { @@ -1135,7 +1189,7 @@ "@@apple_support~//crosstool:setup.bzl%apple_cc_configure_extension": { "general": { "bzlTransitiveDigest": "q07sZYYHQRmej7IYlxIigQ/7iEy9zMnOrSIagEwIG6Q=", - "usagesDigest": "fe2odiE5nvy4BXvMJSkQEP0BFhJ/bMKhVBFkh+VCfqU=", + "usagesDigest": "aLmqbvowmHkkBPve05yyDNGN7oh7QE9kBADr3QIZTZs=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1163,7 +1217,7 @@ "@@bazel_tools//tools/android:android_extensions.bzl%android_sdk_proxy_extensions": { "general": { "bzlTransitiveDigest": "JQoCqdz3xQGJ+/ILJLx/pnLPCjAYRvq3Tmj3wkpmflI=", - "usagesDigest": "UR0C09VpC2pdWyzRgNo7R7VRfrsAY7XPP5StMCtaGKo=", + "usagesDigest": "MxHwjf0M2Z/ciNsN0U0t4T1LF5A1ZXwM1kigPKI+3SA=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1180,7 +1234,7 @@ "@@bazel_tools//tools/android:android_extensions.bzl%remote_android_tools_extensions": { "general": { "bzlTransitiveDigest": "JQoCqdz3xQGJ+/ILJLx/pnLPCjAYRvq3Tmj3wkpmflI=", - "usagesDigest": "dw7C7ErPIkjYn3yY10kLuOatAlp+XNoJ1RbOr/1/3Tg=", + "usagesDigest": "pfoI3DAAesYHdp38xIvu9Ry0AM3EIPGwvav/Cyv23Kw=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1208,7 +1262,7 @@ "@@bazel_tools//tools/cpp:cc_configure.bzl%cc_configure_extension": { "general": { "bzlTransitiveDigest": "kOmQSSXx3QJNSJrErTFZzy7Jpc0NDAA1fiURpFLFH5A=", - "usagesDigest": "gWYd8gJQoq+NpmwavSUrR13PCKHYkpwE7EvqssERMc8=", + "usagesDigest": "6zVI5vmN6Evleo1nJgTcfkJmgPFqhlf1Wl94WarCpa0=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1236,7 +1290,7 @@ "@@bazel_tools//tools/osx:xcode_configure.bzl%xcode_configure_extension": { "general": { "bzlTransitiveDigest": "zLDpG5CJtAVf5IHbbOETi2fbeQLGZuW+yueVxW8o7sE=", - "usagesDigest": "6IVLzvb1OpngnM2xlJMGcF4ORDez1NantK5MY6HVXRo=", + "usagesDigest": "hl3K6oDsXyui9k2oT4OTT6CdW6L/lSrBDSOWIZiUT1Q=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1256,7 +1310,7 @@ "@@bazel_tools//tools/sh:sh_configure.bzl%sh_configure_extension": { "general": { "bzlTransitiveDigest": "hp4NgmNjEg5+xgvzfh6L83bt9/aiiWETuNpwNuF1MSU=", - "usagesDigest": "OFE3XiZmPfwxbY+NUdJN9QP5yiQTMoPN6zW5aV3n4fY=", + "usagesDigest": "gYz9qiTxGtMhXZhrQTBErBunPVrPWNhiFJAP9Nf18GM=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1273,7 +1327,7 @@ "@@bazel_tools//tools/test:extensions.bzl%remote_coverage_tools_extension": { "general": { "bzlTransitiveDigest": "kcwMubtgxBru6ttbkwo5IjUmLeSz0AODaQoox5L4zVU=", - "usagesDigest": "fsG10p+ckw98K4MfcQu0IYsMwidhFcUesWaQcPdj7vY=", + "usagesDigest": "5AzD10fWCl4vQ0i0Zl96Ial7tU8raC84LTK6DeHefuk=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1295,7 +1349,7 @@ "@@buildozer~//:buildozer_binary.bzl%buildozer_binary": { "general": { "bzlTransitiveDigest": "EleDU/FQ1+e/RgkW3aIDmdaxZEthvoWQhsqFTxiSgMI=", - "usagesDigest": "z0uLgf24hCzSZAiM0N9nal6UjWKM4JAmNbm56LP0vU0=", + "usagesDigest": "hxw0DOI5uj9VGmLCZhN8VXkjHv/p+F6B1t1NyQTGnO8=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1321,7 +1375,7 @@ "@@platforms//host:extension.bzl%host_platform": { "general": { "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", - "usagesDigest": "/wi7fMPr4cwiSnBi3fXdHVOtA47+TSmMiv8XIxSTiTE=", + "usagesDigest": "meSzxn3DUCcYEhq4HQwExWkWtU4EjriRBQLsZN+Q0SU=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1338,7 +1392,7 @@ "@@rules_java~//java:extensions.bzl%toolchains": { "general": { "bzlTransitiveDigest": "vVD15tu/rctjxFcmEY/kGV8BU29Wa5EgvggNQpJVYrE=", - "usagesDigest": "eBHBwdDAsDtvJ8WuWgXTHIEveUYrhzF+zdOY4oGoDP8=", + "usagesDigest": "km/MmwGP92TBuE8sy/Jk2BmLrfOADnezet92ElEDuSA=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1904,7 +1958,7 @@ "@@rules_jvm_external~//:extensions.bzl%maven": { "general": { "bzlTransitiveDigest": "B3lrNG2za+3c/y7Bldx38hxzAkTa6uYaesdEicYzZes=", - "usagesDigest": "zel/el3Hu7qA5ChuCSQc5Vo46WXLZmMwpH8aUfhD5wM=", + "usagesDigest": "UPebZtX4g40+QepdK3oMHged0o0tq6ojKbW84wE6XRA=", "recordedFileInputs": { "@@rules_jvm_external~//rules_jvm_external_deps_install.json": "10442a5ae27d9ff4c2003e5ab71643bf0d8b48dcf968b4173fa274c3232a8c06" }, @@ -2928,7 +2982,7 @@ "@@rules_jvm_external~//:non-module-deps.bzl%non_module_deps": { "general": { "bzlTransitiveDigest": "4OsuF/ozYz/n2U+6GGxM/3IzzX+qvQtjlY1fXeg2jE0=", - "usagesDigest": "auoSltLJ8wMZ3iqVKYWQsyC9CgcCDt85yHgTXFuQEvE=", + "usagesDigest": "bTG4ItERqhG1LeSs62hQ01DiMarFsflWgpZaghM5qik=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -2956,7 +3010,7 @@ "@@rules_python~//python/extensions:python.bzl%python": { "general": { "bzlTransitiveDigest": "f/rffFOqp0Y5r6QNmElWpkVrIk/9b0pfhd/j+JtG0YM=", - "usagesDigest": "gGVuRK4jgFR/T75mVSEYMFObc6AY82n+c1P5B+5hUkE=", + "usagesDigest": "7vjNHuEgQORYN9+9/77Q4zw1kawobM2oCQb9p0uhL68=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -2986,7 +3040,7 @@ "@@rules_python~//python/extensions/private:internal_deps.bzl%internal_deps": { "general": { "bzlTransitiveDigest": "2QkuIItPQyACdxi2VVWUF2DrUHZ4M8To5Q5TMr6R+CU=", - "usagesDigest": "/sVN6+OrINK3/oVrgWGYeYt+N1f1J1KnGaHR2AUoIMY=", + "usagesDigest": "b+nMDqtqPCBxiMBewNNde3aNjzKqZyvJuN5/49xB62s=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {},