From a56840c49e186eec83177f0625fb9309fb16e94e Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Fri, 6 Oct 2023 14:41:30 +0200 Subject: [PATCH 1/2] tests/publish/dependencies: Add index snapshot to `new_krate_with_dependency` test --- src/tests/krate/publish/dependencies.rs | 3 +++ ...pendencies__new_krate_with_dependency.snap | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_krate_with_dependency.snap diff --git a/src/tests/krate/publish/dependencies.rs b/src/tests/krate/publish/dependencies.rs index b3bf5a62e05..6f966ce411c 100644 --- a/src/tests/krate/publish/dependencies.rs +++ b/src/tests/krate/publish/dependencies.rs @@ -97,6 +97,9 @@ fn new_krate_with_dependency() { assert_eq!(dependencies.len(), 1); assert_eq!(dependencies[0].crate_id, "foo-dep"); assert_eq!(dependencies[0].req, "1.0.0"); + + let crates = app.crates_from_index_head("new_dep"); + assert_json_snapshot!(crates); } #[test] diff --git a/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_krate_with_dependency.snap b/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_krate_with_dependency.snap new file mode 100644 index 00000000000..27824a45e58 --- /dev/null +++ b/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_krate_with_dependency.snap @@ -0,0 +1,24 @@ +--- +source: src/tests/krate/publish/dependencies.rs +expression: crates +--- +[ + { + "name": "new_dep", + "vers": "1.0.0", + "deps": [ + { + "name": "foo-dep", + "req": "1.0.0", + "features": [], + "optional": false, + "default_features": true, + "target": null, + "kind": "normal" + } + ], + "cksum": "b1ce14dbe59036a964369747770d2d64695039065384b1ab56f09a59525300a6", + "features": {}, + "yanked": false + } +] From fc2b704ad9ba997a5b1f6dfdb114f4d5438ffd4d Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Fri, 6 Oct 2023 14:39:18 +0200 Subject: [PATCH 2/2] publish: Normalize dependency version requirements --- src/controllers/krate/publish.rs | 12 ++++++++++-- src/tests/krate/publish/dependencies.rs | 2 +- ..._publish__dependencies__new_krate_sorts_deps.snap | 4 ++-- ...ish__dependencies__new_krate_with_dependency.snap | 2 +- ...h__dependencies__new_with_renamed_dependency.snap | 2 +- ...cies__new_with_underscore_renamed_dependency.snap | 2 +- ...krate__publish__features__features_version_2.snap | 2 +- 7 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/controllers/krate/publish.rs b/src/controllers/krate/publish.rs index 43b0592e9ae..dd0ea572718 100644 --- a/src/controllers/krate/publish.rs +++ b/src/controllers/krate/publish.rs @@ -506,7 +506,15 @@ fn convert_dependency( target: Option<&str>, ) -> EncodableCrateDependency { let details = dep.detail(); - let req = dep.req(); + + // Normalize version requirement with a `parse()` and `to_string()` cycle. + // + // If the value can't be parsed the `validate_dependency()` fn will return + // an error later in the call chain. Parsing the value twice is a bit + // wasteful, but we can clean this up later. + let req = semver::VersionReq::parse(dep.req()) + .map(|req| req.to_string()) + .unwrap_or_else(|_| dep.req().to_string()); let (crate_name, explicit_name_in_toml) = match details.and_then(|it| it.package.clone()) { None => (name.to_string(), None), @@ -522,7 +530,7 @@ fn convert_dependency( EncodableCrateDependency { name: crate_name, - version_req: req.to_string(), + version_req: req, optional, default_features, features, diff --git a/src/tests/krate/publish/dependencies.rs b/src/tests/krate/publish/dependencies.rs index 6f966ce411c..452031ef472 100644 --- a/src/tests/krate/publish/dependencies.rs +++ b/src/tests/krate/publish/dependencies.rs @@ -96,7 +96,7 @@ fn new_krate_with_dependency() { assert_eq!(dependencies.len(), 1); assert_eq!(dependencies[0].crate_id, "foo-dep"); - assert_eq!(dependencies[0].req, "1.0.0"); + assert_eq!(dependencies[0].req, "^1.0.0"); let crates = app.crates_from_index_head("new_dep"); assert_json_snapshot!(crates); diff --git a/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_krate_sorts_deps.snap b/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_krate_sorts_deps.snap index 55da3a9bdfd..7f40e5435f7 100644 --- a/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_krate_sorts_deps.snap +++ b/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_krate_sorts_deps.snap @@ -9,7 +9,7 @@ expression: crates "deps": [ { "name": "dep-a", - "req": "> 0", + "req": ">0", "features": [], "optional": false, "default_features": true, @@ -18,7 +18,7 @@ expression: crates }, { "name": "dep-b", - "req": "> 0", + "req": ">0", "features": [], "optional": false, "default_features": true, diff --git a/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_krate_with_dependency.snap b/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_krate_with_dependency.snap index 27824a45e58..79aea66aba5 100644 --- a/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_krate_with_dependency.snap +++ b/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_krate_with_dependency.snap @@ -9,7 +9,7 @@ expression: crates "deps": [ { "name": "foo-dep", - "req": "1.0.0", + "req": "^1.0.0", "features": [], "optional": false, "default_features": true, diff --git a/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_with_renamed_dependency.snap b/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_with_renamed_dependency.snap index 17c593c5958..8075e4d7ed7 100644 --- a/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_with_renamed_dependency.snap +++ b/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_with_renamed_dependency.snap @@ -9,7 +9,7 @@ expression: crates "deps": [ { "name": "my-name", - "req": "> 0", + "req": ">0", "features": [], "optional": false, "default_features": true, diff --git a/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_with_underscore_renamed_dependency.snap b/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_with_underscore_renamed_dependency.snap index 503a8c05a0e..2d2a8d19c46 100644 --- a/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_with_underscore_renamed_dependency.snap +++ b/src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_with_underscore_renamed_dependency.snap @@ -9,7 +9,7 @@ expression: crates "deps": [ { "name": "_my-name", - "req": "> 0", + "req": ">0", "features": [], "optional": false, "default_features": true, diff --git a/src/tests/krate/publish/snapshots/all__krate__publish__features__features_version_2.snap b/src/tests/krate/publish/snapshots/all__krate__publish__features__features_version_2.snap index ef0df3e995c..90197e8f3dd 100644 --- a/src/tests/krate/publish/snapshots/all__krate__publish__features__features_version_2.snap +++ b/src/tests/krate/publish/snapshots/all__krate__publish__features__features_version_2.snap @@ -9,7 +9,7 @@ expression: crates "deps": [ { "name": "bar", - "req": "> 0", + "req": ">0", "features": [], "optional": false, "default_features": true,