crate_universe: move build-script dep to extra_deps (#4090)
Fixes #4089.
A crate with a build script depends on its own `build_script_build`
target. That edge was stored in `common_attrs.deps`, which
`Context::workspace_member_deps()` collects to emit crate-hub aliases —
so a library crate with a build script got a dead crate-hub alias for
itself.
Store the edge in `common_attrs.extra_deps` instead:
`workspace_member_deps()` does not read `extra_deps`, so the
self-reference no longer yields an alias. (`extra_deps` holds resolved
labels, so the edge becomes a relative `:build_script_build` — same
target, same package.)
Co-authored-by: UebelAndre <github@uebelandre.com>
diff --git a/crate_universe/src/context.rs b/crate_universe/src/context.rs
index 2c2ec03..de5225b 100644
--- a/crate_universe/src/context.rs
+++ b/crate_universe/src/context.rs
@@ -412,7 +412,6 @@
.map(|dep| (&dep.id, context.has_duplicate_workspace_member_dep_by_alias(dep)))
.collect::<Vec<_>>(),
[
- (&CrateId::new("child".to_owned(), Version::new(0, 1, 0)), false),
(&CrateId::new("tonic".to_owned(), Version::new(0, 4, 3)), false),
(&CrateId::new("tonic-build".to_owned(), Version::new(0, 4, 2)), false),
],
diff --git a/crate_universe/src/context/crate_context.rs b/crate_universe/src/context/crate_context.rs
index 97eeee3..f76b20a 100644
--- a/crate_universe/src/context/crate_context.rs
+++ b/crate_universe/src/context/crate_context.rs
@@ -1,6 +1,7 @@
//! Crate specific information embedded into [crate::context::Context] objects.
use std::collections::{BTreeMap, BTreeSet};
+use std::str::FromStr;
use camino::Utf8PathBuf;
use cargo_metadata::{Node, Package, PackageId};
@@ -504,16 +505,8 @@
let build_script_attrs = if let Some(target) = build_script_target {
// Track the build script dependency
- common_attrs.deps.insert(
- CrateDependency {
- id: current_crate_id,
- target: target.crate_name.clone(),
- alias: None,
- local_path: match source_annotations.get(&annotation.node.id) {
- Some(SourceAnnotation::Path { path }) => Some(path.clone()),
- _ => None,
- },
- },
+ common_attrs.extra_deps.insert(
+ Label::from_str(&format!(":{}", target.crate_name)).unwrap(),
None,
);