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 b3bf5a62e05..452031ef472 100644 --- a/src/tests/krate/publish/dependencies.rs +++ b/src/tests/krate/publish/dependencies.rs @@ -96,7 +96,10 @@ 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); } #[test] 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 new file mode 100644 index 00000000000..79aea66aba5 --- /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 + } +] 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,