From 6651781593377cb3f9d17313885b190d0731e58f Mon Sep 17 00:00:00 2001 From: Weihang Lo Date: Fri, 13 May 2022 20:44:13 +0800 Subject: [PATCH 1/4] Remove unnecessary `dbg!` --- tests/testsuite/vendor.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testsuite/vendor.rs b/tests/testsuite/vendor.rs index 06feb5056b1..7cea26a1338 100644 --- a/tests/testsuite/vendor.rs +++ b/tests/testsuite/vendor.rs @@ -117,7 +117,7 @@ fn package_exclude() { .publish(); p.cargo("vendor --respect-source-config").run(); - let csum = dbg!(p.read_file("vendor/bar/.cargo-checksum.json")); + let csum = p.read_file("vendor/bar/.cargo-checksum.json"); assert!(csum.contains(".include")); assert!(!csum.contains(".exclude")); assert!(!csum.contains(".dotdir/exclude")); From 378e292cfa64dc7a788ac3761de311ebdf619d82 Mon Sep 17 00:00:00 2001 From: Weihang Lo Date: Fri, 13 May 2022 20:24:50 +0800 Subject: [PATCH 2/4] test: cargo-vendor with path specified --- tests/testsuite/vendor.rs | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/tests/testsuite/vendor.rs b/tests/testsuite/vendor.rs index 7cea26a1338..6b5c22fd95c 100644 --- a/tests/testsuite/vendor.rs +++ b/tests/testsuite/vendor.rs @@ -69,6 +69,53 @@ directory = "vendor" .run(); } +#[cargo_test] +fn vendor_path_specified() { + let p = project() + .file( + "Cargo.toml", + r#" + [package] + name = "foo" + version = "0.1.0" + + [dependencies] + log = "0.3.5" + "#, + ) + .file("src/lib.rs", "") + .build(); + + Package::new("log", "0.3.5").publish(); + + let path = if cfg!(windows) { + r#"deps\.vendor"# + } else { + "deps/.vendor" + }; + + let output = p + .cargo("vendor --respect-source-config") + .arg(path) + .exec_with_output() + .unwrap(); + // Assert against original output to ensure that + // path is normalized by `ops::vendor` on Windows. + assert_eq!( + &String::from_utf8(output.stdout).unwrap(), + r#" +[source.crates-io] +replace-with = "vendored-sources" + +[source.vendored-sources] +directory = "deps/.vendor" +"# + ); + + let lock = p.read_file("deps/.vendor/log/Cargo.toml"); + assert!(lock.contains("version = \"0.3.5\"")); +} + fn add_vendor_config(p: &Project) { p.change_file( ".cargo/config", From f7e173527bff466d31609762e30c6e2ec36b5b19 Mon Sep 17 00:00:00 2001 From: Weihang Lo Date: Fri, 13 May 2022 20:38:06 +0800 Subject: [PATCH 3/4] cargo-vendor: path normalize for backslashes --- src/cargo/ops/vendor.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cargo/ops/vendor.rs b/src/cargo/ops/vendor.rs index a5eeb68f3e9..f59e9a0b4c2 100644 --- a/src/cargo/ops/vendor.rs +++ b/src/cargo/ops/vendor.rs @@ -60,7 +60,7 @@ struct VendorConfig { #[serde(rename_all = "lowercase", untagged)] enum VendorSource { Directory { - directory: PathBuf, + directory: String, }, Registry { registry: Option, @@ -298,7 +298,7 @@ fn sync( config.insert( merged_source_name.to_string(), VendorSource::Directory { - directory: opts.destination.to_path_buf(), + directory: opts.destination.to_string_lossy().replace("\\", "/"), }, ); } else if !dest_dir_already_exists { From 88e88923e0f996245a41209e3b026acc5ba0cbf5 Mon Sep 17 00:00:00 2001 From: Weihang Lo Date: Sat, 16 Jul 2022 23:39:24 +0100 Subject: [PATCH 4/4] Explain why normalizing slashes on vendor config output --- src/cargo/ops/vendor.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cargo/ops/vendor.rs b/src/cargo/ops/vendor.rs index f59e9a0b4c2..1449581088a 100644 --- a/src/cargo/ops/vendor.rs +++ b/src/cargo/ops/vendor.rs @@ -298,6 +298,9 @@ fn sync( config.insert( merged_source_name.to_string(), VendorSource::Directory { + // Windows-flavour paths are valid here on Windows but Unix. + // This backslash normalization is for making output paths more + // cross-platform compatible. directory: opts.destination.to_string_lossy().replace("\\", "/"), }, );