mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +00:00
refactor(toml): extract dependency-to-source-id to function
This commit is contained in:
parent
955503e1de
commit
a5d2a1d3dc
@ -1810,6 +1810,90 @@ fn detailed_dep_to_dependency<P: ResolveToPath + Clone>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let new_source_id = to_dependency_source_id(orig, name_in_toml, manifest_ctx)?;
|
||||||
|
|
||||||
|
let (pkg_name, explicit_name_in_toml) = match orig.package {
|
||||||
|
Some(ref s) => (&s[..], Some(name_in_toml)),
|
||||||
|
None => (name_in_toml, None),
|
||||||
|
};
|
||||||
|
|
||||||
|
let version = orig.version.as_deref();
|
||||||
|
let mut dep = Dependency::parse(pkg_name, version, new_source_id)?;
|
||||||
|
deprecated_underscore(
|
||||||
|
&orig.default_features2,
|
||||||
|
&orig.default_features,
|
||||||
|
"default-features",
|
||||||
|
name_in_toml,
|
||||||
|
"dependency",
|
||||||
|
manifest_ctx.warnings,
|
||||||
|
);
|
||||||
|
dep.set_features(orig.features.iter().flatten())
|
||||||
|
.set_default_features(orig.default_features().unwrap_or(true))
|
||||||
|
.set_optional(orig.optional.unwrap_or(false))
|
||||||
|
.set_platform(manifest_ctx.platform.clone());
|
||||||
|
if let Some(registry) = &orig.registry {
|
||||||
|
let registry_id = SourceId::alt_registry(manifest_ctx.gctx, registry)?;
|
||||||
|
dep.set_registry_id(registry_id);
|
||||||
|
}
|
||||||
|
if let Some(registry_index) = &orig.registry_index {
|
||||||
|
let url = registry_index.into_url()?;
|
||||||
|
let registry_id = SourceId::for_registry(&url)?;
|
||||||
|
dep.set_registry_id(registry_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(kind) = kind {
|
||||||
|
dep.set_kind(kind);
|
||||||
|
}
|
||||||
|
if let Some(name_in_toml) = explicit_name_in_toml {
|
||||||
|
dep.set_explicit_name_in_toml(name_in_toml);
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(p) = orig.public {
|
||||||
|
dep.set_public(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
if let (Some(artifact), is_lib, target) = (
|
||||||
|
orig.artifact.as_ref(),
|
||||||
|
orig.lib.unwrap_or(false),
|
||||||
|
orig.target.as_deref(),
|
||||||
|
) {
|
||||||
|
if manifest_ctx.gctx.cli_unstable().bindeps {
|
||||||
|
let artifact = Artifact::parse(&artifact.0, is_lib, target)?;
|
||||||
|
if dep.kind() != DepKind::Build
|
||||||
|
&& artifact.target() == Some(ArtifactTarget::BuildDependencyAssumeTarget)
|
||||||
|
{
|
||||||
|
bail!(
|
||||||
|
r#"`target = "target"` in normal- or dev-dependencies has no effect ({})"#,
|
||||||
|
name_in_toml
|
||||||
|
);
|
||||||
|
}
|
||||||
|
dep.set_artifact(artifact)
|
||||||
|
} else {
|
||||||
|
bail!("`artifact = …` requires `-Z bindeps` ({})", name_in_toml);
|
||||||
|
}
|
||||||
|
} else if orig.lib.is_some() || orig.target.is_some() {
|
||||||
|
for (is_set, specifier) in [
|
||||||
|
(orig.lib.is_some(), "lib"),
|
||||||
|
(orig.target.is_some(), "target"),
|
||||||
|
] {
|
||||||
|
if !is_set {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
bail!(
|
||||||
|
"'{}' specifier cannot be used without an 'artifact = …' value ({})",
|
||||||
|
specifier,
|
||||||
|
name_in_toml
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(dep)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn to_dependency_source_id<P: ResolveToPath + Clone>(
|
||||||
|
orig: &manifest::TomlDetailedDependency<P>,
|
||||||
|
name_in_toml: &str,
|
||||||
|
manifest_ctx: &mut ManifestContext<'_, '_>,
|
||||||
|
) -> CargoResult<SourceId> {
|
||||||
let new_source_id = match (
|
let new_source_id = match (
|
||||||
orig.git.as_ref(),
|
orig.git.as_ref(),
|
||||||
orig.path.as_ref(),
|
orig.path.as_ref(),
|
||||||
@ -1895,81 +1979,7 @@ fn detailed_dep_to_dependency<P: ResolveToPath + Clone>(
|
|||||||
(None, None, None, None) => SourceId::crates_io(manifest_ctx.gctx)?,
|
(None, None, None, None) => SourceId::crates_io(manifest_ctx.gctx)?,
|
||||||
};
|
};
|
||||||
|
|
||||||
let (pkg_name, explicit_name_in_toml) = match orig.package {
|
Ok(new_source_id)
|
||||||
Some(ref s) => (&s[..], Some(name_in_toml)),
|
|
||||||
None => (name_in_toml, None),
|
|
||||||
};
|
|
||||||
|
|
||||||
let version = orig.version.as_deref();
|
|
||||||
let mut dep = Dependency::parse(pkg_name, version, new_source_id)?;
|
|
||||||
deprecated_underscore(
|
|
||||||
&orig.default_features2,
|
|
||||||
&orig.default_features,
|
|
||||||
"default-features",
|
|
||||||
name_in_toml,
|
|
||||||
"dependency",
|
|
||||||
manifest_ctx.warnings,
|
|
||||||
);
|
|
||||||
dep.set_features(orig.features.iter().flatten())
|
|
||||||
.set_default_features(orig.default_features().unwrap_or(true))
|
|
||||||
.set_optional(orig.optional.unwrap_or(false))
|
|
||||||
.set_platform(manifest_ctx.platform.clone());
|
|
||||||
if let Some(registry) = &orig.registry {
|
|
||||||
let registry_id = SourceId::alt_registry(manifest_ctx.gctx, registry)?;
|
|
||||||
dep.set_registry_id(registry_id);
|
|
||||||
}
|
|
||||||
if let Some(registry_index) = &orig.registry_index {
|
|
||||||
let url = registry_index.into_url()?;
|
|
||||||
let registry_id = SourceId::for_registry(&url)?;
|
|
||||||
dep.set_registry_id(registry_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(kind) = kind {
|
|
||||||
dep.set_kind(kind);
|
|
||||||
}
|
|
||||||
if let Some(name_in_toml) = explicit_name_in_toml {
|
|
||||||
dep.set_explicit_name_in_toml(name_in_toml);
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(p) = orig.public {
|
|
||||||
dep.set_public(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
if let (Some(artifact), is_lib, target) = (
|
|
||||||
orig.artifact.as_ref(),
|
|
||||||
orig.lib.unwrap_or(false),
|
|
||||||
orig.target.as_deref(),
|
|
||||||
) {
|
|
||||||
if manifest_ctx.gctx.cli_unstable().bindeps {
|
|
||||||
let artifact = Artifact::parse(&artifact.0, is_lib, target)?;
|
|
||||||
if dep.kind() != DepKind::Build
|
|
||||||
&& artifact.target() == Some(ArtifactTarget::BuildDependencyAssumeTarget)
|
|
||||||
{
|
|
||||||
bail!(
|
|
||||||
r#"`target = "target"` in normal- or dev-dependencies has no effect ({})"#,
|
|
||||||
name_in_toml
|
|
||||||
);
|
|
||||||
}
|
|
||||||
dep.set_artifact(artifact)
|
|
||||||
} else {
|
|
||||||
bail!("`artifact = …` requires `-Z bindeps` ({})", name_in_toml);
|
|
||||||
}
|
|
||||||
} else if orig.lib.is_some() || orig.target.is_some() {
|
|
||||||
for (is_set, specifier) in [
|
|
||||||
(orig.lib.is_some(), "lib"),
|
|
||||||
(orig.target.is_some(), "target"),
|
|
||||||
] {
|
|
||||||
if !is_set {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
bail!(
|
|
||||||
"'{}' specifier cannot be used without an 'artifact = …' value ({})",
|
|
||||||
specifier,
|
|
||||||
name_in_toml
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Ok(dep)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait ResolveToPath {
|
pub trait ResolveToPath {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user