From 706e5b25c9a2d7fd1377f29f1e97ee963554626f Mon Sep 17 00:00:00 2001 From: Scott Schafer Date: Thu, 26 May 2022 14:02:00 -0500 Subject: [PATCH] fix key formatting when switching to a dotted `WorkspaceSource` --- src/cargo/ops/cargo_add/dependency.rs | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/cargo/ops/cargo_add/dependency.rs b/src/cargo/ops/cargo_add/dependency.rs index 530696fb333..e86f12e033c 100644 --- a/src/cargo/ops/cargo_add/dependency.rs +++ b/src/cargo/ops/cargo_add/dependency.rs @@ -486,9 +486,7 @@ impl Dependency { if str_or_1_len_table(item) { // Nothing to preserve *item = self.to_toml(crate_root); - if self.source != Some(Source::Workspace(WorkspaceSource)) { - key.fmt(); - } + key.fmt(); } else if let Some(table) = item.as_table_like_mut() { match &self.source { Some(Source::Registry(src)) => { @@ -940,6 +938,7 @@ impl Display for WorkspaceSource { mod tests { use std::path::Path; + use crate::ops::cargo_add::manifest::LocalManifest; use cargo_util::paths; use super::*; @@ -1123,6 +1122,25 @@ mod tests { verify_roundtrip(&crate_root, key, &item); } + #[test] + fn overwrite_with_workspace_source_fmt_key() { + let crate_root = + paths::normalize_path(&std::env::current_dir().unwrap().join(Path::new("./"))); + let toml = "dep = \"1.0\"\n"; + let manifest = toml.parse().unwrap(); + let mut local = LocalManifest { + path: crate_root.clone(), + manifest, + }; + assert_eq!(local.manifest.to_string(), toml); + for (key, item) in local.data.clone().iter() { + let dep = Dependency::from_toml(&crate_root, key, item).unwrap(); + let dep = dep.set_source(WorkspaceSource::new()); + local.insert_into_table(&vec![], &dep).unwrap(); + assert_eq!(local.data.to_string(), "dep.workspace = true\n"); + } + } + #[test] #[cfg(windows)] fn normalise_windows_style_paths() {