diff --git a/src/cargo/core/workspace.rs b/src/cargo/core/workspace.rs index a9b325e9d94..f80bacc1744 100644 --- a/src/cargo/core/workspace.rs +++ b/src/cargo/core/workspace.rs @@ -509,17 +509,12 @@ impl<'gctx> Workspace<'gctx> { url, deps.iter() .map(|(name, dependency_cv)| { - crate::util::toml::to_dependency( + crate::util::toml::config_patch_to_dependency( &dependency_cv.val, name, source, self.gctx, &mut warnings, - /* platform */ None, - // NOTE: Since we use ConfigRelativePath, this root isn't used as - // any relative paths are resolved before they'd be joined with root. - Path::new("unused-relative-path"), - /* kind */ None, ) .map(|dep| Patch { dep, diff --git a/src/cargo/util/toml/mod.rs b/src/cargo/util/toml/mod.rs index 441e3f184f1..f873bc8e57e 100644 --- a/src/cargo/util/toml/mod.rs +++ b/src/cargo/util/toml/mod.rs @@ -2159,59 +2159,40 @@ fn patch( Ok(patch) } -pub(crate) fn to_dependency( - dep: &manifest::TomlDependency

, +/// Transforms a `patch` entry from Cargo config to a [`Dependency`]. +pub(crate) fn config_patch_to_dependency( + config_patch: &manifest::TomlDependency

, name: &str, source_id: SourceId, gctx: &GlobalContext, warnings: &mut Vec, - platform: Option, - file: &Path, - kind: Option, ) -> CargoResult { - dep_to_dependency( - dep, - name, - &mut ManifestContext { - deps: &mut Vec::new(), - source_id, - gctx, - warnings, - platform, - file, - }, - kind, - ) + let manifest_ctx = &mut ManifestContext { + deps: &mut Vec::new(), + source_id, + gctx, + warnings, + platform: None, + // config path doesn't have manifest file path, and doesn't use it. + file: Path::new("unused"), + }; + dep_to_dependency(config_patch, name, manifest_ctx, None) } fn dep_to_dependency( orig: &manifest::TomlDependency

, - name: &str, - manifest_ctx: &mut ManifestContext<'_, '_>, - kind: Option, -) -> CargoResult { - match *orig { - manifest::TomlDependency::Simple(ref version) => detailed_dep_to_dependency( - &manifest::TomlDetailedDependency::

{ - version: Some(version.clone()), - ..Default::default() - }, - name, - manifest_ctx, - kind, - ), - manifest::TomlDependency::Detailed(ref details) => { - detailed_dep_to_dependency(details, name, manifest_ctx, kind) - } - } -} - -fn detailed_dep_to_dependency( - orig: &manifest::TomlDetailedDependency

, name_in_toml: &str, manifest_ctx: &mut ManifestContext<'_, '_>, kind: Option, ) -> CargoResult { + let orig = match orig { + manifest::TomlDependency::Simple(version) => &manifest::TomlDetailedDependency::

{ + version: Some(version.clone()), + ..Default::default() + }, + manifest::TomlDependency::Detailed(details) => details, + }; + if orig.version.is_none() && orig.path.is_none() && orig.git.is_none() { anyhow::bail!( "dependency ({name_in_toml}) specified without \