Skip to content

Commit e593efc

Browse files
committed
Auto merge of #6476 - dwijnand:salvaged-semver-work, r=Eh2406
Salvaged semver work None
2 parents 8e547a7 + 1606ab3 commit e593efc

File tree

4 files changed

+28
-35
lines changed

4 files changed

+28
-35
lines changed

src/cargo/core/package_id.rs

+16-23
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,12 @@ impl<'de> de::Deserialize<'de> for PackageId {
7272
let string = String::deserialize(d)?;
7373
let mut s = string.splitn(3, ' ');
7474
let name = s.next().unwrap();
75+
let name = InternedString::new(name);
7576
let version = match s.next() {
7677
Some(s) => s,
7778
None => return Err(de::Error::custom("invalid serialized PackageId")),
7879
};
79-
let version = semver::Version::parse(version).map_err(de::Error::custom)?;
80+
let version = version.to_semver().map_err(de::Error::custom)?;
8081
let url = match s.next() {
8182
Some(s) => s,
8283
None => return Err(de::Error::custom("invalid serialized PackageId")),
@@ -88,11 +89,7 @@ impl<'de> de::Deserialize<'de> for PackageId {
8889
};
8990
let source_id = SourceId::from_url(url).map_err(de::Error::custom)?;
9091

91-
Ok(PackageId::wrap(PackageIdInner {
92-
name: InternedString::new(name),
93-
version,
94-
source_id,
95-
}))
92+
Ok(PackageId::pure(name, version, source_id))
9693
}
9794
}
9895

@@ -118,15 +115,15 @@ impl<'a> Hash for PackageId {
118115
impl PackageId {
119116
pub fn new<T: ToSemver>(name: &str, version: T, sid: SourceId) -> CargoResult<PackageId> {
120117
let v = version.to_semver()?;
121-
122-
Ok(PackageId::wrap(PackageIdInner {
123-
name: InternedString::new(name),
124-
version: v,
125-
source_id: sid,
126-
}))
118+
Ok(PackageId::pure(InternedString::new(name), v, sid))
127119
}
128120

129-
fn wrap(inner: PackageIdInner) -> PackageId {
121+
pub fn pure(name: InternedString, version: semver::Version, source_id: SourceId) -> PackageId {
122+
let inner = PackageIdInner {
123+
name,
124+
version,
125+
source_id,
126+
};
130127
let mut cache = PACKAGE_ID_CACHE.lock().unwrap();
131128
let inner = cache.get(&inner).cloned().unwrap_or_else(|| {
132129
let inner = Box::leak(Box::new(inner));
@@ -147,19 +144,15 @@ impl PackageId {
147144
}
148145

149146
pub fn with_precise(self, precise: Option<String>) -> PackageId {
150-
PackageId::wrap(PackageIdInner {
151-
name: self.inner.name,
152-
version: self.inner.version.clone(),
153-
source_id: self.inner.source_id.with_precise(precise),
154-
})
147+
PackageId::pure(
148+
self.inner.name,
149+
self.inner.version.clone(),
150+
self.inner.source_id.with_precise(precise),
151+
)
155152
}
156153

157154
pub fn with_source_id(self, source: SourceId) -> PackageId {
158-
PackageId::wrap(PackageIdInner {
159-
name: self.inner.name,
160-
version: self.inner.version.clone(),
161-
source_id: source,
162-
})
155+
PackageId::pure(self.inner.name, self.inner.version.clone(), source)
163156
}
164157

165158
pub fn stable_hash(self, workspace: &Path) -> PackageIdStableHash<'_> {

src/cargo/core/package_id_spec.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ impl PackageIdSpec {
6161
let mut parts = spec.splitn(2, ':');
6262
let name = parts.next().unwrap();
6363
let version = match parts.next() {
64-
Some(version) => Some(Version::parse(version)?),
64+
Some(version) => Some(version.to_semver()?),
6565
None => None,
6666
};
6767
validate_package_name(name, "pkgid", "")?;
@@ -274,7 +274,7 @@ impl<'de> de::Deserialize<'de> for PackageIdSpec {
274274
mod tests {
275275
use super::PackageIdSpec;
276276
use crate::core::{PackageId, SourceId};
277-
use semver::Version;
277+
use crate::util::ToSemver;
278278
use url::Url;
279279

280280
#[test]
@@ -289,15 +289,15 @@ mod tests {
289289
"http://crates.io/foo#1.2.3",
290290
PackageIdSpec {
291291
name: "foo".to_string(),
292-
version: Some(Version::parse("1.2.3").unwrap()),
292+
version: Some("1.2.3".to_semver().unwrap()),
293293
url: Some(Url::parse("http://crates.io/foo").unwrap()),
294294
},
295295
);
296296
ok(
297297
"http://crates.io/foo#bar:1.2.3",
298298
PackageIdSpec {
299299
name: "bar".to_string(),
300-
version: Some(Version::parse("1.2.3").unwrap()),
300+
version: Some("1.2.3".to_semver().unwrap()),
301301
url: Some(Url::parse("http://crates.io/foo").unwrap()),
302302
},
303303
);
@@ -313,7 +313,7 @@ mod tests {
313313
"crates.io/foo#1.2.3",
314314
PackageIdSpec {
315315
name: "foo".to_string(),
316-
version: Some(Version::parse("1.2.3").unwrap()),
316+
version: Some("1.2.3".to_semver().unwrap()),
317317
url: Some(Url::parse("cargo://crates.io/foo").unwrap()),
318318
},
319319
);
@@ -329,7 +329,7 @@ mod tests {
329329
"crates.io/foo#bar:1.2.3",
330330
PackageIdSpec {
331331
name: "bar".to_string(),
332-
version: Some(Version::parse("1.2.3").unwrap()),
332+
version: Some("1.2.3".to_semver().unwrap()),
333333
url: Some(Url::parse("cargo://crates.io/foo").unwrap()),
334334
},
335335
);
@@ -345,7 +345,7 @@ mod tests {
345345
"foo:1.2.3",
346346
PackageIdSpec {
347347
name: "foo".to_string(),
348-
version: Some(Version::parse("1.2.3").unwrap()),
348+
version: Some("1.2.3".to_semver().unwrap()),
349349
url: None,
350350
},
351351
);

src/cargo/ops/cargo_install.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::path::{Path, PathBuf};
66
use std::sync::Arc;
77
use std::{env, fs};
88

9-
use semver::{Version, VersionReq};
9+
use semver::VersionReq;
1010
use serde::{Deserialize, Serialize};
1111
use tempfile::Builder as TempFileBuilder;
1212

@@ -19,7 +19,7 @@ use crate::ops::{self, CompileFilter};
1919
use crate::sources::{GitSource, PathSource, SourceConfigMap};
2020
use crate::util::errors::{CargoResult, CargoResultExt};
2121
use crate::util::paths;
22-
use crate::util::{internal, Config};
22+
use crate::util::{internal, Config, ToSemver};
2323
use crate::util::{FileLock, Filesystem};
2424

2525
#[derive(Deserialize, Serialize)]
@@ -456,7 +456,7 @@ where
456456
v
457457
),
458458
},
459-
_ => match v.parse::<Version>() {
459+
_ => match v.to_semver() {
460460
Ok(v) => Some(format!("={}", v)),
461461
Err(_) => {
462462
let mut msg = format!(

src/cargo/sources/registry/index.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::core::dependency::Dependency;
99
use crate::core::{PackageId, SourceId, Summary};
1010
use crate::sources::registry::RegistryData;
1111
use crate::sources::registry::{RegistryPackage, INDEX_LOCK};
12-
use crate::util::{internal, CargoResult, Config, Filesystem};
12+
use crate::util::{internal, CargoResult, Config, Filesystem, ToSemver};
1313

1414
/// Crates.io treats hyphen and underscores as interchangeable
1515
/// but, the index and old cargo do not. So the index must store uncanonicalized version
@@ -293,7 +293,7 @@ impl<'cfg> RegistryIndex<'cfg> {
293293
let mut vers = p[name.len() + 1..].splitn(2, "->");
294294
if dep
295295
.version_req()
296-
.matches(&Version::parse(vers.next().unwrap()).unwrap())
296+
.matches(&vers.next().unwrap().to_semver().unwrap())
297297
{
298298
vers.next().unwrap() == s.version().to_string()
299299
} else {

0 commit comments

Comments
 (0)