Skip to content

Commit 03f13b9

Browse files
authored
Set CARGO_HOME for cargo metadata (#1209)
1 parent b84c30c commit 03f13b9

File tree

1 file changed

+32
-23
lines changed

1 file changed

+32
-23
lines changed

src/languages/rust/rust.rs

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ async fn find_package_dir(
3737
repo: &Path,
3838
binary_name: &str,
3939
cargo: Option<&Path>,
40+
cargo_home: Option<&Path>,
4041
new_path: Option<&OsStr>,
4142
) -> anyhow::Result<Option<(PathBuf, String, bool)>> {
4243
let cargo = cargo.unwrap_or(Path::new("cargo"));
@@ -45,6 +46,9 @@ async fn find_package_dir(
4546
if let Some(new_path) = new_path {
4647
cmd.env(EnvVars::PATH, new_path);
4748
}
49+
if let Some(cargo_home) = cargo_home {
50+
cmd.env(EnvVars::CARGO_HOME, cargo_home);
51+
}
4852
let output = cmd
4953
.arg("metadata")
5054
.arg("--format-version")
@@ -158,6 +162,7 @@ async fn install_local_project(
158162
repo_path,
159163
binary_name,
160164
Some(cargo),
165+
Some(cargo_home),
161166
Some(new_path),
162167
)
163168
.await
@@ -472,10 +477,11 @@ edition = "2021"
472477
write_file(&temp.path().join("Cargo.toml"), cargo_toml).await;
473478
write_file(&temp.path().join("src/main.rs"), "fn main() {}").await;
474479

475-
let (path, pkg_name, is_workspace) = find_package_dir(temp.path(), "my-tool", None, None)
476-
.await
477-
.unwrap()
478-
.unwrap();
480+
let (path, pkg_name, is_workspace) =
481+
find_package_dir(temp.path(), "my-tool", None, None, None)
482+
.await
483+
.unwrap()
484+
.unwrap();
479485
assert_eq!(path, temp.path());
480486
assert_eq!(pkg_name, "my-tool");
481487
assert!(!is_workspace);
@@ -494,7 +500,7 @@ edition = "2021"
494500
write_file(&temp.path().join("src/main.rs"), "fn main() {}").await;
495501

496502
// Should match with underscores instead of hyphens
497-
let (path, _pkg, is_workspace) = find_package_dir(temp.path(), "my_tool", None, None)
503+
let (path, _pkg, is_workspace) = find_package_dir(temp.path(), "my_tool", None, None, None)
498504
.await
499505
.unwrap()
500506
.unwrap();
@@ -528,7 +534,7 @@ edition = "2021"
528534
write_file(&temp.path().join("subcrate/src/lib.rs"), "").await;
529535

530536
let (path, pkg_name, is_workspace) =
531-
find_package_dir(temp.path(), "cargo-deny", None, None)
537+
find_package_dir(temp.path(), "cargo-deny", None, None, None)
532538
.await
533539
.unwrap()
534540
.unwrap();
@@ -564,10 +570,11 @@ edition = "2021"
564570
write_file(&temp.path().join("lib/Cargo.toml"), lib_toml).await;
565571
write_file(&temp.path().join("lib/src/lib.rs"), "").await;
566572

567-
let (path, pkg_name, is_workspace) = find_package_dir(temp.path(), "my-cli", None, None)
568-
.await
569-
.unwrap()
570-
.unwrap();
573+
let (path, pkg_name, is_workspace) =
574+
find_package_dir(temp.path(), "my-cli", None, None, None)
575+
.await
576+
.unwrap()
577+
.unwrap();
571578
assert_eq!(path, temp.path().join("cli"));
572579
assert_eq!(pkg_name, "my-cli");
573580
assert!(is_workspace);
@@ -602,10 +609,11 @@ path = "src/main.rs"
602609
.await;
603610

604611
// Should find by binary name, return package name
605-
let (path, pkg_name, is_workspace) = find_package_dir(temp.path(), "typos", None, None)
606-
.await
607-
.unwrap()
608-
.unwrap();
612+
let (path, pkg_name, is_workspace) =
613+
find_package_dir(temp.path(), "typos", None, None, None)
614+
.await
615+
.unwrap()
616+
.unwrap();
609617
assert_eq!(path, temp.path().join("crates/typos-cli"));
610618
assert_eq!(pkg_name, "typos-cli");
611619
assert!(is_workspace);
@@ -626,7 +634,7 @@ edition = "2021"
626634
// Need a lib.rs or main.rs for the package itself
627635
write_file(&temp.path().join("src/lib.rs"), "").await;
628636

629-
let (path, _pkg, is_workspace) = find_package_dir(temp.path(), "my-tool", None, None)
637+
let (path, _pkg, is_workspace) = find_package_dir(temp.path(), "my-tool", None, None, None)
630638
.await
631639
.unwrap()
632640
.unwrap();
@@ -654,7 +662,7 @@ edition = "2021"
654662
write_file(&temp.path().join("crates/cli/src/main.rs"), "fn main() {}").await;
655663

656664
let (path, pkg_name, is_workspace) =
657-
find_package_dir(temp.path(), "virtual-cli", None, None)
665+
find_package_dir(temp.path(), "virtual-cli", None, None, None)
658666
.await
659667
.unwrap()
660668
.unwrap();
@@ -691,16 +699,17 @@ edition = "2021"
691699
write_file(&temp.path().join("crates/lib/Cargo.toml"), lib_toml).await;
692700
write_file(&temp.path().join("crates/lib/src/lib.rs"), "").await;
693701

694-
let (path, pkg_name, is_workspace) = find_package_dir(temp.path(), "my-cli", None, None)
695-
.await
696-
.unwrap()
697-
.unwrap();
702+
let (path, pkg_name, is_workspace) =
703+
find_package_dir(temp.path(), "my-cli", None, None, None)
704+
.await
705+
.unwrap()
706+
.unwrap();
698707
assert_eq!(path, temp.path().join("crates/cli"));
699708
assert_eq!(pkg_name, "my-cli");
700709
assert!(is_workspace);
701710

702711
// my-lib is a library (no binary), so searching for it should fail
703-
let result = find_package_dir(temp.path(), "my-lib", None, None)
712+
let result = find_package_dir(temp.path(), "my-lib", None, None, None)
704713
.await
705714
.unwrap();
706715
assert!(result.is_none());
@@ -710,7 +719,7 @@ edition = "2021"
710719
async fn test_find_package_dir_no_cargo_toml() {
711720
let temp = TempDir::new().unwrap();
712721

713-
let result = find_package_dir(temp.path(), "anything", None, None).await;
722+
let result = find_package_dir(temp.path(), "anything", None, None, None).await;
714723
assert!(result.is_err());
715724
// cargo metadata gives a different error message
716725
assert!(result.unwrap_err().to_string().contains("cargo metadata"));
@@ -734,7 +743,7 @@ edition = "2021"
734743
write_file(&temp.path().join("cli/Cargo.toml"), cli_toml).await;
735744
write_file(&temp.path().join("cli/src/main.rs"), "fn main() {}").await;
736745

737-
let result = find_package_dir(temp.path(), "nonexistent-binary", None, None)
746+
let result = find_package_dir(temp.path(), "nonexistent-binary", None, None, None)
738747
.await
739748
.unwrap();
740749
assert!(result.is_none());

0 commit comments

Comments
 (0)