@@ -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