Skip to content

Commit 0b8c961

Browse files
Prevent adding @crates// dependency entries for dependencies in the
workspace This comes up if you, for example, have a vendored dependency which you've modified to point at something in your workspace
1 parent b332517 commit 0b8c961

15 files changed

Lines changed: 488 additions & 1 deletion

File tree

rs/extensions.bzl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,11 @@ def _generate_hub_and_spokes(
205205

206206
workspace_root = _normalize_path(cargo_metadata["workspace_root"])
207207
workspace_root_prefix = workspace_root + "/"
208+
workspace_package = _label_directory(cargo_lock_path)
208209
workspace_member_keys = {}
209210
for package in cargo_metadata["packages"]:
210-
workspace_member_keys[(package["name"], package["version"])] = True
211+
package_dir = _normalize_path(package["manifest_path"]).removeprefix(workspace_root_prefix).removesuffix("/Cargo.toml")
212+
workspace_member_keys[(package["name"], package["version"])] = "@@//" + paths.join(workspace_package, package_dir)
211213

212214
dep_paths_by_name = {}
213215
for package in cargo_metadata["packages"]:

test/BUILD.bazel

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,26 @@ genquery(
171171
scope = ["@workspace_member_annotation_features//:dep_leaf-0.1.0"],
172172
)
173173

174+
genquery(
175+
name = "vendored_workspace_dep_itoa_deps",
176+
expression = "deps(@vendored_workspace_dep//:itoa-1.0.11)",
177+
scope = ["@vendored_workspace_dep//:itoa-1.0.11"],
178+
)
179+
180+
genrule(
181+
name = "verify_vendored_workspace_dep",
182+
srcs = [":vendored_workspace_dep_itoa_deps"],
183+
outs = ["verify_vendored_workspace_dep.txt"],
184+
cmd = """
185+
if grep 'vendored_workspace_dep//:mylib' $(location :vendored_workspace_dep_itoa_deps); then
186+
echo "FAIL: itoa should not have a hub dep on workspace member mylib"
187+
exit 1
188+
fi
189+
grep '//vendored_workspace_dep/mylib' $(location :vendored_workspace_dep_itoa_deps)
190+
echo ok > $@
191+
""",
192+
)
193+
174194
verify_alias(
175195
name = "verify_workspace_hyphen_dep_aliases",
176196
aliases = workspace_hyphen_dep_aliases_aliases(package_name = "workspace_hyphen_dep_aliases/consumer"),
@@ -305,6 +325,7 @@ filegroup(
305325
":verify_workspace_default_features_subfeature_present",
306326
":verify_workspace_hyphen_dep_aliases",
307327
":verify_workspace_member_annotation_features",
328+
":verify_vendored_workspace_dep",
308329
":verify_workspace_renamed_path_dep_aliases",
309330
"//prost:echo_rust_proto",
310331
"//self_dev_dependency/mycrate",

test/MODULE.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ TESTS = [
148148
"target_workspace_dep_feature",
149149
"vendored_crate_override",
150150
"workspace_default_features",
151+
"vendored_workspace_dep",
151152
"workspace_member_annotation_features",
152153
"workspace_git_dep",
153154
"workspace_path_dependency",

test/MODULE.bazel.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package(default_visibility = ["//visibility:public"])

test/vendored_workspace_dep/Cargo.lock

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[workspace]
2+
members = ["mylib", "app"]
3+
exclude = ["vendor/itoa"]
4+
resolver = "3"
5+
6+
[workspace.dependencies]
7+
mylib = { path = "./mylib" }
8+
itoa = { path = "./vendor/itoa" }
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[package]
2+
name = "vendored_workspace_dep_demo"
3+
version = "0.1.0"
4+
edition = "2024"
5+
6+
[dependencies]
7+
itoa = { workspace = true }
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
fn main() {
2+
let mut buffer = itoa::Buffer::new();
3+
let formatted = buffer.format(42);
4+
println!("vendored itoa says: {formatted}");
5+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
load("@rules_rs//rs:rust_library.bzl", "rust_library")
2+
3+
package(default_visibility = ["//visibility:public"])
4+
5+
rust_library(
6+
name = "mylib",
7+
srcs = ["src/lib.rs"],
8+
edition = "2024",
9+
)

0 commit comments

Comments
 (0)