Skip to content

Commit 34a222e

Browse files
committedAug 26, 2024·
fix(bazel): Apply name and version overrides earlier
In order to use the correct keys for the scope lookup, name and version overrides need to be applied earlier. This fixes the recognition of development dependencies with archive overrides. Signed-off-by: Sebastian Schuberth <sebastian@doubleopen.org>
1 parent 32dfe21 commit 34a222e

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed
 

‎plugins/package-managers/bazel/src/funTest/assets/projects/synthetic/bazel-expected-output-archive-override.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ project:
1717
homepage_url: ""
1818
scopes:
1919
- name: "dev"
20-
dependencies: []
21-
- name: "main"
2220
dependencies:
2321
- id: "Bazel::nanopb:0.4.9"
2422
linkage: "STATIC"
@@ -171,6 +169,8 @@ project:
171169
linkage: "STATIC"
172170
- id: "Bazel::rules_proto:6.0.2"
173171
linkage: "STATIC"
172+
- name: "main"
173+
dependencies:
174174
- id: "Bazel::rules_cuda:0.1.1"
175175
linkage: "STATIC"
176176
dependencies:

‎plugins/package-managers/bazel/src/main/kotlin/Bazel.kt

+18-9
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,20 @@ class Bazel(
370370
): Set<Scope> {
371371
val process = run("mod", "graph", "--output", "json", "--disk_cache=", workingDir = projectDir)
372372
val mainModule = process.stdout.parseBazelModule()
373-
val (mainDeps, devDeps) = mainModule.dependencies.partition { depDirectives[it.key]?.devDependency != true }
373+
val (mainDeps, devDeps) = mainModule.dependencies.map { module ->
374+
val name = module.name ?: module.key.substringBefore("@", "")
375+
val version = module.version ?: module.key.substringAfter("@", "")
376+
377+
val overriddenKey = "$name@$version"
378+
if (overriddenKey != module.key) {
379+
logger.info { "Using overridden module key '$overriddenKey' instead of '${module.key}'." }
380+
module.copy(key = "$name@$version")
381+
} else {
382+
module
383+
}
384+
}.partition {
385+
depDirectives[it.key]?.devDependency != true
386+
}
374387

375388
return setOf(
376389
Scope(
@@ -387,24 +400,20 @@ class Bazel(
387400
/**
388401
* Convert a [BazelModule] to a [PackageReference].
389402
*/
390-
private fun BazelModule.toPackageReference(archiveOverrides: Map<String, ArchiveOverride>): PackageReference {
391-
val packageRefName = name ?: key.substringBefore("@", "")
392-
val packageRefVersion = version ?: key.substringAfter("@", "")
393-
394-
return PackageReference(
403+
private fun BazelModule.toPackageReference(archiveOverrides: Map<String, ArchiveOverride>): PackageReference =
404+
PackageReference(
395405
id = Identifier(
396406
type = managerName,
397407
namespace = "",
398-
name = packageRefName,
399-
version = packageRefVersion
408+
name = key.substringBefore("@", ""),
409+
version = key.substringAfter("@", "")
400410
),
401411
// Static linking is the default for cc_binary targets. According to the documentation, it is off for
402412
// cc_test, but according to experiments, it is on.
403413
// See https://bazel.build/reference/be/c-cpp#cc_binary.linkstatic
404414
linkage = PackageLinkage.STATIC,
405415
dependencies = dependencies.mapTo(mutableSetOf()) { it.toPackageReference(archiveOverrides) }
406416
)
407-
}
408417
}
409418

410419
private fun String.expandRepositoryUrl(): String = withoutPrefix("github:")?.let { "https://github.com/$it" } ?: this

0 commit comments

Comments
 (0)
Please sign in to comment.