mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +00:00
Auto merge of #6476 - dwijnand:salvaged-semver-work, r=Eh2406
Salvaged semver work None
This commit is contained in:
commit
e593efc9cb
@ -72,11 +72,12 @@ impl<'de> de::Deserialize<'de> for PackageId {
|
|||||||
let string = String::deserialize(d)?;
|
let string = String::deserialize(d)?;
|
||||||
let mut s = string.splitn(3, ' ');
|
let mut s = string.splitn(3, ' ');
|
||||||
let name = s.next().unwrap();
|
let name = s.next().unwrap();
|
||||||
|
let name = InternedString::new(name);
|
||||||
let version = match s.next() {
|
let version = match s.next() {
|
||||||
Some(s) => s,
|
Some(s) => s,
|
||||||
None => return Err(de::Error::custom("invalid serialized PackageId")),
|
None => return Err(de::Error::custom("invalid serialized PackageId")),
|
||||||
};
|
};
|
||||||
let version = semver::Version::parse(version).map_err(de::Error::custom)?;
|
let version = version.to_semver().map_err(de::Error::custom)?;
|
||||||
let url = match s.next() {
|
let url = match s.next() {
|
||||||
Some(s) => s,
|
Some(s) => s,
|
||||||
None => return Err(de::Error::custom("invalid serialized PackageId")),
|
None => return Err(de::Error::custom("invalid serialized PackageId")),
|
||||||
@ -88,11 +89,7 @@ impl<'de> de::Deserialize<'de> for PackageId {
|
|||||||
};
|
};
|
||||||
let source_id = SourceId::from_url(url).map_err(de::Error::custom)?;
|
let source_id = SourceId::from_url(url).map_err(de::Error::custom)?;
|
||||||
|
|
||||||
Ok(PackageId::wrap(PackageIdInner {
|
Ok(PackageId::pure(name, version, source_id))
|
||||||
name: InternedString::new(name),
|
|
||||||
version,
|
|
||||||
source_id,
|
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,15 +115,15 @@ impl<'a> Hash for PackageId {
|
|||||||
impl PackageId {
|
impl PackageId {
|
||||||
pub fn new<T: ToSemver>(name: &str, version: T, sid: SourceId) -> CargoResult<PackageId> {
|
pub fn new<T: ToSemver>(name: &str, version: T, sid: SourceId) -> CargoResult<PackageId> {
|
||||||
let v = version.to_semver()?;
|
let v = version.to_semver()?;
|
||||||
|
Ok(PackageId::pure(InternedString::new(name), v, sid))
|
||||||
Ok(PackageId::wrap(PackageIdInner {
|
|
||||||
name: InternedString::new(name),
|
|
||||||
version: v,
|
|
||||||
source_id: sid,
|
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn wrap(inner: PackageIdInner) -> PackageId {
|
pub fn pure(name: InternedString, version: semver::Version, source_id: SourceId) -> PackageId {
|
||||||
|
let inner = PackageIdInner {
|
||||||
|
name,
|
||||||
|
version,
|
||||||
|
source_id,
|
||||||
|
};
|
||||||
let mut cache = PACKAGE_ID_CACHE.lock().unwrap();
|
let mut cache = PACKAGE_ID_CACHE.lock().unwrap();
|
||||||
let inner = cache.get(&inner).cloned().unwrap_or_else(|| {
|
let inner = cache.get(&inner).cloned().unwrap_or_else(|| {
|
||||||
let inner = Box::leak(Box::new(inner));
|
let inner = Box::leak(Box::new(inner));
|
||||||
@ -147,19 +144,15 @@ impl PackageId {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_precise(self, precise: Option<String>) -> PackageId {
|
pub fn with_precise(self, precise: Option<String>) -> PackageId {
|
||||||
PackageId::wrap(PackageIdInner {
|
PackageId::pure(
|
||||||
name: self.inner.name,
|
self.inner.name,
|
||||||
version: self.inner.version.clone(),
|
self.inner.version.clone(),
|
||||||
source_id: self.inner.source_id.with_precise(precise),
|
self.inner.source_id.with_precise(precise),
|
||||||
})
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_source_id(self, source: SourceId) -> PackageId {
|
pub fn with_source_id(self, source: SourceId) -> PackageId {
|
||||||
PackageId::wrap(PackageIdInner {
|
PackageId::pure(self.inner.name, self.inner.version.clone(), source)
|
||||||
name: self.inner.name,
|
|
||||||
version: self.inner.version.clone(),
|
|
||||||
source_id: source,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn stable_hash(self, workspace: &Path) -> PackageIdStableHash<'_> {
|
pub fn stable_hash(self, workspace: &Path) -> PackageIdStableHash<'_> {
|
||||||
|
@ -61,7 +61,7 @@ impl PackageIdSpec {
|
|||||||
let mut parts = spec.splitn(2, ':');
|
let mut parts = spec.splitn(2, ':');
|
||||||
let name = parts.next().unwrap();
|
let name = parts.next().unwrap();
|
||||||
let version = match parts.next() {
|
let version = match parts.next() {
|
||||||
Some(version) => Some(Version::parse(version)?),
|
Some(version) => Some(version.to_semver()?),
|
||||||
None => None,
|
None => None,
|
||||||
};
|
};
|
||||||
validate_package_name(name, "pkgid", "")?;
|
validate_package_name(name, "pkgid", "")?;
|
||||||
@ -274,7 +274,7 @@ impl<'de> de::Deserialize<'de> for PackageIdSpec {
|
|||||||
mod tests {
|
mod tests {
|
||||||
use super::PackageIdSpec;
|
use super::PackageIdSpec;
|
||||||
use crate::core::{PackageId, SourceId};
|
use crate::core::{PackageId, SourceId};
|
||||||
use semver::Version;
|
use crate::util::ToSemver;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -289,7 +289,7 @@ mod tests {
|
|||||||
"http://crates.io/foo#1.2.3",
|
"http://crates.io/foo#1.2.3",
|
||||||
PackageIdSpec {
|
PackageIdSpec {
|
||||||
name: "foo".to_string(),
|
name: "foo".to_string(),
|
||||||
version: Some(Version::parse("1.2.3").unwrap()),
|
version: Some("1.2.3".to_semver().unwrap()),
|
||||||
url: Some(Url::parse("http://crates.io/foo").unwrap()),
|
url: Some(Url::parse("http://crates.io/foo").unwrap()),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -297,7 +297,7 @@ mod tests {
|
|||||||
"http://crates.io/foo#bar:1.2.3",
|
"http://crates.io/foo#bar:1.2.3",
|
||||||
PackageIdSpec {
|
PackageIdSpec {
|
||||||
name: "bar".to_string(),
|
name: "bar".to_string(),
|
||||||
version: Some(Version::parse("1.2.3").unwrap()),
|
version: Some("1.2.3".to_semver().unwrap()),
|
||||||
url: Some(Url::parse("http://crates.io/foo").unwrap()),
|
url: Some(Url::parse("http://crates.io/foo").unwrap()),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -313,7 +313,7 @@ mod tests {
|
|||||||
"crates.io/foo#1.2.3",
|
"crates.io/foo#1.2.3",
|
||||||
PackageIdSpec {
|
PackageIdSpec {
|
||||||
name: "foo".to_string(),
|
name: "foo".to_string(),
|
||||||
version: Some(Version::parse("1.2.3").unwrap()),
|
version: Some("1.2.3".to_semver().unwrap()),
|
||||||
url: Some(Url::parse("cargo://crates.io/foo").unwrap()),
|
url: Some(Url::parse("cargo://crates.io/foo").unwrap()),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -329,7 +329,7 @@ mod tests {
|
|||||||
"crates.io/foo#bar:1.2.3",
|
"crates.io/foo#bar:1.2.3",
|
||||||
PackageIdSpec {
|
PackageIdSpec {
|
||||||
name: "bar".to_string(),
|
name: "bar".to_string(),
|
||||||
version: Some(Version::parse("1.2.3").unwrap()),
|
version: Some("1.2.3".to_semver().unwrap()),
|
||||||
url: Some(Url::parse("cargo://crates.io/foo").unwrap()),
|
url: Some(Url::parse("cargo://crates.io/foo").unwrap()),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -345,7 +345,7 @@ mod tests {
|
|||||||
"foo:1.2.3",
|
"foo:1.2.3",
|
||||||
PackageIdSpec {
|
PackageIdSpec {
|
||||||
name: "foo".to_string(),
|
name: "foo".to_string(),
|
||||||
version: Some(Version::parse("1.2.3").unwrap()),
|
version: Some("1.2.3".to_semver().unwrap()),
|
||||||
url: None,
|
url: None,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -6,7 +6,7 @@ use std::path::{Path, PathBuf};
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::{env, fs};
|
use std::{env, fs};
|
||||||
|
|
||||||
use semver::{Version, VersionReq};
|
use semver::VersionReq;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use tempfile::Builder as TempFileBuilder;
|
use tempfile::Builder as TempFileBuilder;
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ use crate::ops::{self, CompileFilter};
|
|||||||
use crate::sources::{GitSource, PathSource, SourceConfigMap};
|
use crate::sources::{GitSource, PathSource, SourceConfigMap};
|
||||||
use crate::util::errors::{CargoResult, CargoResultExt};
|
use crate::util::errors::{CargoResult, CargoResultExt};
|
||||||
use crate::util::paths;
|
use crate::util::paths;
|
||||||
use crate::util::{internal, Config};
|
use crate::util::{internal, Config, ToSemver};
|
||||||
use crate::util::{FileLock, Filesystem};
|
use crate::util::{FileLock, Filesystem};
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize)]
|
#[derive(Deserialize, Serialize)]
|
||||||
@ -456,7 +456,7 @@ where
|
|||||||
v
|
v
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
_ => match v.parse::<Version>() {
|
_ => match v.to_semver() {
|
||||||
Ok(v) => Some(format!("={}", v)),
|
Ok(v) => Some(format!("={}", v)),
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
let mut msg = format!(
|
let mut msg = format!(
|
||||||
|
@ -9,7 +9,7 @@ use crate::core::dependency::Dependency;
|
|||||||
use crate::core::{PackageId, SourceId, Summary};
|
use crate::core::{PackageId, SourceId, Summary};
|
||||||
use crate::sources::registry::RegistryData;
|
use crate::sources::registry::RegistryData;
|
||||||
use crate::sources::registry::{RegistryPackage, INDEX_LOCK};
|
use crate::sources::registry::{RegistryPackage, INDEX_LOCK};
|
||||||
use crate::util::{internal, CargoResult, Config, Filesystem};
|
use crate::util::{internal, CargoResult, Config, Filesystem, ToSemver};
|
||||||
|
|
||||||
/// Crates.io treats hyphen and underscores as interchangeable
|
/// Crates.io treats hyphen and underscores as interchangeable
|
||||||
/// but, the index and old cargo do not. So the index must store uncanonicalized version
|
/// but, the index and old cargo do not. So the index must store uncanonicalized version
|
||||||
@ -293,7 +293,7 @@ impl<'cfg> RegistryIndex<'cfg> {
|
|||||||
let mut vers = p[name.len() + 1..].splitn(2, "->");
|
let mut vers = p[name.len() + 1..].splitn(2, "->");
|
||||||
if dep
|
if dep
|
||||||
.version_req()
|
.version_req()
|
||||||
.matches(&Version::parse(vers.next().unwrap()).unwrap())
|
.matches(&vers.next().unwrap().to_semver().unwrap())
|
||||||
{
|
{
|
||||||
vers.next().unwrap() == s.version().to_string()
|
vers.next().unwrap() == s.version().to_string()
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user