mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +00:00
fix(package): Register workspace member renames in overlay (#15228)
### What does this PR try to resolve? This was reported at https://github.com/rust-lang/cargo/issues/10948#issuecomment-2674289330 For the exact mapping between the publish payload and the index, see https://doc.rust-lang.org/cargo/reference/registry-index.html#json-schema, particularly the note about differences. ### How should we test and review this PR? ### Additional information I suspect there is a second bug here because my debugging only showed us hitting this scenario for `val-json` and not `concepts` and only when building `utils`. That difference in behavior between a transitive and direct dependency is odd.
This commit is contained in:
commit
ffafda8fd4
@ -1032,22 +1032,33 @@ impl<'a> TmpRegistry<'a> {
|
|||||||
let deps: Vec<_> = new_crate
|
let deps: Vec<_> = new_crate
|
||||||
.deps
|
.deps
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|dep| RegistryDependency {
|
.map(|dep| {
|
||||||
name: dep.name.into(),
|
let name = dep
|
||||||
req: dep.version_req.into(),
|
.explicit_name_in_toml
|
||||||
features: dep.features.into_iter().map(|x| x.into()).collect(),
|
.clone()
|
||||||
optional: dep.optional,
|
.unwrap_or_else(|| dep.name.clone())
|
||||||
default_features: dep.default_features,
|
.into();
|
||||||
target: dep.target.map(|x| x.into()),
|
let package = dep
|
||||||
kind: Some(dep.kind.into()),
|
.explicit_name_in_toml
|
||||||
registry: dep.registry.map(|x| x.into()),
|
.as_ref()
|
||||||
package: None,
|
.map(|_| dep.name.clone().into());
|
||||||
public: None,
|
RegistryDependency {
|
||||||
artifact: dep
|
name: name,
|
||||||
.artifact
|
req: dep.version_req.into(),
|
||||||
.map(|xs| xs.into_iter().map(|x| x.into()).collect()),
|
features: dep.features.into_iter().map(|x| x.into()).collect(),
|
||||||
bindep_target: dep.bindep_target.map(|x| x.into()),
|
optional: dep.optional,
|
||||||
lib: dep.lib,
|
default_features: dep.default_features,
|
||||||
|
target: dep.target.map(|x| x.into()),
|
||||||
|
kind: Some(dep.kind.into()),
|
||||||
|
registry: dep.registry.map(|x| x.into()),
|
||||||
|
package: package,
|
||||||
|
public: None,
|
||||||
|
artifact: dep
|
||||||
|
.artifact
|
||||||
|
.map(|xs| xs.into_iter().map(|x| x.into()).collect()),
|
||||||
|
bindep_target: dep.bindep_target.map(|x| x.into()),
|
||||||
|
lib: dep.lib,
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
|
@ -6492,6 +6492,110 @@ fn workspace_with_capitalized_member() {
|
|||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cargo_test]
|
||||||
|
fn workspace_with_renamed_member() {
|
||||||
|
let reg = registry::init();
|
||||||
|
|
||||||
|
let p = project()
|
||||||
|
.file(
|
||||||
|
"Cargo.toml",
|
||||||
|
r#"
|
||||||
|
[workspace]
|
||||||
|
members = ["crates/*"]
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.file(
|
||||||
|
"crates/val-json/Cargo.toml",
|
||||||
|
r#"
|
||||||
|
[package]
|
||||||
|
name = "obeli-sk-val-json"
|
||||||
|
version = "0.16.2"
|
||||||
|
edition = "2015"
|
||||||
|
authors = []
|
||||||
|
license = "MIT"
|
||||||
|
description = "main"
|
||||||
|
repository = "bar"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.file("crates/val-json/src/lib.rs", "pub fn foo() {}")
|
||||||
|
.file(
|
||||||
|
"crates/concepts/Cargo.toml",
|
||||||
|
r#"
|
||||||
|
[package]
|
||||||
|
name = "obeli-sk-concepts"
|
||||||
|
version = "0.16.2"
|
||||||
|
edition = "2015"
|
||||||
|
authors = []
|
||||||
|
license = "MIT"
|
||||||
|
description = "main"
|
||||||
|
repository = "bar"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
val-json = { package = "obeli-sk-val-json", path = "../val-json", version = "0.16.2" }
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.file(
|
||||||
|
"crates/concepts/src/lib.rs",
|
||||||
|
"pub fn foo() { val_json::foo() }",
|
||||||
|
)
|
||||||
|
.file(
|
||||||
|
"crates/utils/Cargo.toml",
|
||||||
|
r#"
|
||||||
|
[package]
|
||||||
|
name = "obeli-sk-utils"
|
||||||
|
version = "0.16.2"
|
||||||
|
edition = "2015"
|
||||||
|
authors = []
|
||||||
|
license = "MIT"
|
||||||
|
description = "main"
|
||||||
|
repository = "bar"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
concepts = { package = "obeli-sk-concepts", path = "../concepts", version = "0.16.2" }
|
||||||
|
val-json = { package = "obeli-sk-val-json", path = "../val-json", version = "0.16.2" }
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.file(
|
||||||
|
"crates/utils/src/lib.rs",
|
||||||
|
"pub fn foo() { val_json::foo(); concepts::foo(); }",
|
||||||
|
)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
p.cargo("package -Zpackage-workspace")
|
||||||
|
.masquerade_as_nightly_cargo(&["package-workspace"])
|
||||||
|
.replace_crates_io(reg.index_url())
|
||||||
|
.with_stderr_data(
|
||||||
|
str![[r#"
|
||||||
|
[UPDATING] crates.io index
|
||||||
|
[PACKAGED] 4 files, [FILE_SIZE]B ([FILE_SIZE]B compressed)
|
||||||
|
[PACKAGED] 4 files, [FILE_SIZE]B ([FILE_SIZE]B compressed)
|
||||||
|
[PACKAGING] obeli-sk-val-json v0.16.2 ([ROOT]/foo/crates/val-json)
|
||||||
|
[PACKAGING] obeli-sk-concepts v0.16.2 ([ROOT]/foo/crates/concepts)
|
||||||
|
[PACKAGING] obeli-sk-utils v0.16.2 ([ROOT]/foo/crates/utils)
|
||||||
|
[PACKAGED] 4 files, [FILE_SIZE]B ([FILE_SIZE]B compressed)
|
||||||
|
[VERIFYING] obeli-sk-val-json v0.16.2 ([ROOT]/foo/crates/val-json)
|
||||||
|
[COMPILING] obeli-sk-val-json v0.16.2 ([ROOT]/foo/target/package/obeli-sk-val-json-0.16.2)
|
||||||
|
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
|
||||||
|
[VERIFYING] obeli-sk-concepts v0.16.2 ([ROOT]/foo/crates/concepts)
|
||||||
|
[UNPACKING] obeli-sk-val-json v0.16.2 (registry `[ROOT]/foo/target/package/tmp-registry`)
|
||||||
|
[COMPILING] obeli-sk-val-json v0.16.2
|
||||||
|
[COMPILING] obeli-sk-concepts v0.16.2 ([ROOT]/foo/target/package/obeli-sk-concepts-0.16.2)
|
||||||
|
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
|
||||||
|
[VERIFYING] obeli-sk-utils v0.16.2 ([ROOT]/foo/crates/utils)
|
||||||
|
[UNPACKING] obeli-sk-concepts v0.16.2 (registry `[ROOT]/foo/target/package/tmp-registry`)
|
||||||
|
[COMPILING] obeli-sk-val-json v0.16.2
|
||||||
|
[COMPILING] obeli-sk-concepts v0.16.2
|
||||||
|
[COMPILING] obeli-sk-utils v0.16.2 ([ROOT]/foo/target/package/obeli-sk-utils-0.16.2)
|
||||||
|
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
|
||||||
|
|
||||||
|
"#]]
|
||||||
|
.unordered(),
|
||||||
|
)
|
||||||
|
.run();
|
||||||
|
}
|
||||||
|
|
||||||
#[cargo_test]
|
#[cargo_test]
|
||||||
fn registry_not_in_publish_list() {
|
fn registry_not_in_publish_list() {
|
||||||
let p = project()
|
let p = project()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user