mirror of
https://github.com/rust-lang/cargo.git
synced 2025-09-28 11:20:36 +00:00
refactor(toml): Rely on resolved version
This commit is contained in:
parent
631b077003
commit
6ad976912d
@ -194,6 +194,12 @@ pub struct TomlPackage {
|
|||||||
pub _invalid_cargo_features: Option<InvalidCargoFeatures>,
|
pub _invalid_cargo_features: Option<InvalidCargoFeatures>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl TomlPackage {
|
||||||
|
pub fn resolved_version(&self) -> Result<Option<&semver::Version>, UnresolvedError> {
|
||||||
|
self.version.as_ref().map(|v| v.resolved()).transpose()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// An enum that allows for inheriting keys from a workspace in a Cargo.toml.
|
/// An enum that allows for inheriting keys from a workspace in a Cargo.toml.
|
||||||
#[derive(Serialize, Copy, Clone, Debug)]
|
#[derive(Serialize, Copy, Clone, Debug)]
|
||||||
#[serde(untagged)]
|
#[serde(untagged)]
|
||||||
@ -205,6 +211,10 @@ pub enum InheritableField<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<T> InheritableField<T> {
|
impl<T> InheritableField<T> {
|
||||||
|
pub fn resolved(&self) -> Result<&T, UnresolvedError> {
|
||||||
|
self.as_value().ok_or(UnresolvedError)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn as_value(&self) -> Option<&T> {
|
pub fn as_value(&self) -> Option<&T> {
|
||||||
match self {
|
match self {
|
||||||
InheritableField::Inherit(_) => None,
|
InheritableField::Inherit(_) => None,
|
||||||
@ -1512,3 +1522,9 @@ impl<'de> de::Deserialize<'de> for PathValue {
|
|||||||
Ok(PathValue(String::deserialize(deserializer)?.into()))
|
Ok(PathValue(String::deserialize(deserializer)?.into()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Error validating names in Cargo.
|
||||||
|
#[derive(Debug, thiserror::Error)]
|
||||||
|
#[error("manifest field was not resolved")]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub struct UnresolvedError;
|
||||||
|
@ -544,13 +544,12 @@ pub fn to_real_manifest(
|
|||||||
features.require(Feature::open_namespaces())?;
|
features.require(Feature::open_namespaces())?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let version = package
|
package.version = package
|
||||||
.version
|
.version
|
||||||
.clone()
|
.clone()
|
||||||
.map(|version| field_inherit_with(version, "version", || inherit()?.version()))
|
.map(|value| field_inherit_with(value, "version", || inherit()?.version()))
|
||||||
.transpose()?;
|
.transpose()?
|
||||||
|
.map(manifest::InheritableField::Value);
|
||||||
package.version = version.clone().map(manifest::InheritableField::Value);
|
|
||||||
|
|
||||||
let rust_version = if let Some(rust_version) = &package.rust_version {
|
let rust_version = if let Some(rust_version) = &package.rust_version {
|
||||||
let rust_version = field_inherit_with(rust_version.clone(), "rust_version", || {
|
let rust_version = field_inherit_with(rust_version.clone(), "rust_version", || {
|
||||||
@ -990,6 +989,7 @@ pub fn to_real_manifest(
|
|||||||
.clone()
|
.clone()
|
||||||
.map(|p| manifest::InheritableField::Value(p));
|
.map(|p| manifest::InheritableField::Value(p));
|
||||||
|
|
||||||
|
let version = package.resolved_version().expect("previously resolved");
|
||||||
let publish = match publish {
|
let publish = match publish {
|
||||||
Some(manifest::VecStringOrBool::VecString(ref vecstring)) => Some(vecstring.clone()),
|
Some(manifest::VecStringOrBool::VecString(ref vecstring)) => Some(vecstring.clone()),
|
||||||
Some(manifest::VecStringOrBool::Bool(false)) => Some(vec![]),
|
Some(manifest::VecStringOrBool::Bool(false)) => Some(vec![]),
|
||||||
@ -1004,7 +1004,7 @@ pub fn to_real_manifest(
|
|||||||
let pkgid = PackageId::new(
|
let pkgid = PackageId::new(
|
||||||
package.name.as_str().into(),
|
package.name.as_str().into(),
|
||||||
version
|
version
|
||||||
.clone()
|
.cloned()
|
||||||
.unwrap_or_else(|| semver::Version::new(0, 0, 0)),
|
.unwrap_or_else(|| semver::Version::new(0, 0, 0)),
|
||||||
source_id,
|
source_id,
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user