Skip to content

Commit fa9ff5a

Browse files
committed
publish: Move version req validation to validate_dependencies() fn
1 parent 3401647 commit fa9ff5a

File tree

4 files changed

+14
-24
lines changed

4 files changed

+14
-24
lines changed

src/controllers/krate/publish.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,13 +457,20 @@ pub fn validate_dependencies(deps: &[EncodableCrateDependency]) -> AppResult<()>
457457
}
458458
}
459459

460-
if let Ok(version_req) = semver::VersionReq::parse(&dep.version_req.0) {
461-
if version_req == semver::VersionReq::STAR {
460+
match semver::VersionReq::parse(&dep.version_req) {
461+
Err(_) => {
462+
return Err(cargo_err(&format_args!(
463+
"\"{}\" is an invalid version requirement",
464+
dep.version_req
465+
)));
466+
}
467+
Ok(req) if req == semver::VersionReq::STAR => {
462468
return Err(cargo_err(&format_args!("wildcard (`*`) dependency constraints are not allowed \
463469
on crates.io. Crate with this problem: `{}` See https://doc.rust-lang.org/cargo/faq.html#can-\
464470
libraries-use--as-a-version-for-their-dependencies for more \
465471
information", dep.name)));
466472
}
473+
_ => {}
467474
}
468475
}
469476

src/tests/builders/dependency.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ pub struct DependencyBuilder {
66
name: String,
77
features: Vec<String>,
88
registry: Option<String>,
9-
version_req: u::EncodableCrateVersionReq,
9+
version_req: String,
1010
}
1111

1212
impl DependencyBuilder {
@@ -17,7 +17,7 @@ impl DependencyBuilder {
1717
name: name.to_string(),
1818
features: vec![],
1919
registry: None,
20-
version_req: u::EncodableCrateVersionReq("> 0".to_string()),
20+
version_req: "> 0".to_string(),
2121
}
2222
}
2323

@@ -40,7 +40,7 @@ impl DependencyBuilder {
4040
/// Panics if the `version_req` string specified isn't a valid `semver::VersionReq`.
4141
#[track_caller]
4242
pub fn version_req(mut self, version_req: &str) -> Self {
43-
self.version_req = u::EncodableCrateVersionReq(version_req.to_string());
43+
self.version_req = version_req.to_string();
4444
self
4545
}
4646

src/tests/krate/publish/snapshots/all__krate__publish__dependencies__new_krate_with_broken_dependency_requirement.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ expression: response.into_json()
55
{
66
"errors": [
77
{
8-
"detail": "invalid upload request: invalid value: string \"broken\", expected a valid version req at line 1 column 136"
8+
"detail": "\"broken\" is an invalid version requirement"
99
}
1010
]
1111
}

src/views/krate_publish.rs

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ pub struct EncodableCrateDependency {
2525
pub default_features: bool,
2626
pub name: String,
2727
pub features: Vec<String>,
28-
pub version_req: EncodableCrateVersionReq,
28+
pub version_req: String,
2929
pub target: Option<String>,
3030
pub kind: Option<DependencyKind>,
3131
pub explicit_name_in_toml: Option<EncodableDependencyName>,
@@ -86,20 +86,3 @@ impl<'de> Deserialize<'de> for EncodableCrateVersion {
8686
}
8787
}
8888
}
89-
90-
#[derive(Serialize, Clone, Debug, Deref)]
91-
pub struct EncodableCrateVersionReq(pub String);
92-
93-
impl<'de> Deserialize<'de> for EncodableCrateVersionReq {
94-
fn deserialize<D: Deserializer<'de>>(d: D) -> Result<EncodableCrateVersionReq, D::Error> {
95-
let s = String::deserialize(d)?;
96-
match semver::VersionReq::parse(&s) {
97-
Ok(_) => Ok(EncodableCrateVersionReq(s)),
98-
Err(..) => {
99-
let value = de::Unexpected::Str(&s);
100-
let expected = "a valid version req";
101-
Err(de::Error::invalid_value(value, &expected))
102-
}
103-
}
104-
}
105-
}

0 commit comments

Comments
 (0)