Skip to content

Commit

Permalink
[#6664]: Invoke blaze mod correctly (#6729)
Browse files Browse the repository at this point in the history
* [#6664]: Invoke `blaze mod` correctly

* Reformat with google format
  • Loading branch information
mtoader committed Sep 6, 2024
1 parent effbeb6 commit b8071db
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,37 @@

public class BlazeModRunnerImpl extends BlazeModRunner {

private static final String DUMP_REPO_MAPPING = "dump_repo_mapping";
private static final String ROOT_WORKSPACE = "";

/**
* {@code bazel mod dump_repo_mapping} takes a canonical repository name and will dump a map from
* repoName -> canonicalName of all the external repositories available to that repository The
* name {@code ""} is special and considered to be <em>the main workspace</em> so in order to dump
* the main repository map we would invoke it like {@code bazel mod dump_repo_mapping ""}.
*
* <p>Additionally the flag {@code --enable_workspace} needs to be off for this to work. The flag
* is default off in bazel 8.0.0 but it is on between 7.1.0 and 8.0.0. So we need to also pass
* this along in between those versions for the command to work well.
*/
@Override
public ListenableFuture<ExternalWorkspaceData> dumpRepoMapping(
Project project,
BuildSystem.BuildInvoker invoker,
BlazeContext context,
BuildSystemName buildSystemName,
List<String> flags) {

// TODO: when 8.0.0 is released add this only if it's disabled explicitly for the repo
flags.add("--noenable_workspace");

return Futures.transform(
runBlazeModGetBytes(project, invoker, context, ImmutableList.of( "dump_repo_mapping", "workspace"), flags),
runBlazeModGetBytes(
project, invoker, context, ImmutableList.of(DUMP_REPO_MAPPING, ROOT_WORKSPACE), flags),
bytes -> {
JsonObject json = JsonParser.parseString(new String(bytes, StandardCharsets.UTF_8).trim()).getAsJsonObject();
JsonObject json =
JsonParser.parseString(new String(bytes, StandardCharsets.UTF_8).trim())
.getAsJsonObject();

ImmutableList<ExternalWorkspace> externalWorkspaces =
json.entrySet().stream()
Expand All @@ -70,21 +90,22 @@ protected ListenableFuture<byte[]> runBlazeModGetBytes(
List<String> args,
List<String> flags) {
return BlazeExecutor.getInstance()
.submit(() -> {
BlazeCommand.Builder builder =
BlazeCommand.builder(invoker, BlazeCommandName.MOD)
.addBlazeFlags(flags);
.submit(
() -> {
BlazeCommand.Builder builder =
BlazeCommand.builder(invoker, BlazeCommandName.MOD).addBlazeFlags(flags);

if (args != null) {
builder.addBlazeFlags(args);
}
if (args != null) {
builder.addBlazeFlags(args);
}

try (BuildResultHelper buildResultHelper = invoker.createBuildResultHelper()) {
BlazeCommandRunner runner = invoker.getCommandRunner();
try (InputStream stream = runner.runBlazeMod(project, builder, buildResultHelper, context)) {
return stream.readAllBytes();
}
}
});
try (BuildResultHelper buildResultHelper = invoker.createBuildResultHelper()) {
BlazeCommandRunner runner = invoker.getCommandRunner();
try (InputStream stream =
runner.runBlazeMod(project, builder, buildResultHelper, context)) {
return stream.readAllBytes();
}
}
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,12 @@ public static ExternalWorkspaceDataProvider getInstance(Project project) {
}

static Boolean isEnabled(BlazeVersionData blazeVersionData) {
// disable this until a more reliable opt-in mechanism is chosen.
//
// bg: some blaze workspaces with blaze > MINIMUM_BLAZE_VERSION
// have explicitly disabled this bzlmod support and this causes
// `blaze mod` to fail.
return blazeVersionData.bazelIsAtLeastVersion(MINIMUM_BLAZE_VERSION) && Registry.is("bazel.read.external.workspace.data");
if (!Registry.is("bazel.read.external.workspace.data")) {
logger.info("disabled by registry");
return false;
}

return blazeVersionData.bazelIsAtLeastVersion(MINIMUM_BLAZE_VERSION);
}

public ListenableFuture<ExternalWorkspaceData> getExternalWorkspaceData(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ private ExternalWorkspaceData getExternalWorkspaceData(
SyncMode syncMode)
throws SyncCanceledException, SyncFailedException {

List<String> syncFlags =
List<String> blazeModFlags =
BlazeFlags.blazeFlags(
project,
projectViewSet,
Expand All @@ -243,7 +243,7 @@ private ExternalWorkspaceData getExternalWorkspaceData(

ListenableFuture<ExternalWorkspaceData> externalWorkspaceDataFuture =
ExternalWorkspaceDataProvider.getInstance(project)
.getExternalWorkspaceData(context, syncFlags, blazeVersionData, blazeInfo);
.getExternalWorkspaceData(context, blazeModFlags, blazeVersionData, blazeInfo);

FutureResult<ExternalWorkspaceData> externalWorkspaceDataResult =
FutureUtil.waitForFuture(context, externalWorkspaceDataFuture)
Expand Down

0 comments on commit b8071db

Please sign in to comment.