@@ -520,8 +520,15 @@ pub fn cargo_home() -> Result<PathBuf> {
520
520
None
521
521
} ;
522
522
523
- let cwd = env:: current_dir ( ) . chain_err ( || ErrorKind :: CargoHome ) ?;
524
- let cargo_home = env_var. clone ( ) . map ( |home| cwd. join ( home) ) ;
523
+ let cargo_home = if env_var. is_some ( ) {
524
+ let cwd = try!( env:: current_dir ( ) . chain_err ( || ErrorKind :: GettingCwd ) ) ;
525
+ env_var. clone ( ) . map ( |home| {
526
+ cwd. join ( home)
527
+ } )
528
+ } else {
529
+ None
530
+ } ;
531
+
525
532
let user_home = home_dir ( ) . map ( |p| p. join ( ".cargo" ) ) ;
526
533
cargo_home. or ( user_home) . ok_or ( ErrorKind :: CargoHome . into ( ) )
527
534
}
@@ -716,9 +723,17 @@ pub fn rustup_home_in_user_dir() -> Result<PathBuf> {
716
723
717
724
pub fn rustup_home ( ) -> Result < PathBuf > {
718
725
let use_rustup_dir = do_rustup_home_upgrade ( ) ;
726
+ let rustup_home_env = env:: var_os ( "RUSTUP_HOME" ) ;
727
+
728
+ let rustup_home = if rustup_home_env. is_some ( ) {
729
+ let cwd = try!( env:: current_dir ( ) . chain_err ( || ErrorKind :: GettingCwd ) ) ;
730
+ rustup_home_env. clone ( ) . map ( |home| {
731
+ cwd. join ( home)
732
+ } )
733
+ } else {
734
+ None
735
+ } ;
719
736
720
- let cwd = env:: current_dir ( ) . chain_err ( || ErrorKind :: RustupHome ) ?;
721
- let rustup_home = env:: var_os ( "RUSTUP_HOME" ) . map ( |home| cwd. join ( home) ) ;
722
737
let user_home = if use_rustup_dir {
723
738
dot_dir ( ".rustup" )
724
739
} else {
@@ -822,6 +837,18 @@ fn rename(name: &'static str, src: &Path, dest: &Path) -> Result<()> {
822
837
mod tests {
823
838
use super :: * ;
824
839
840
+ #[ test]
841
+ fn test_cargo_home ( ) {
842
+ // CARGO_HOME unset, we'll get the default ending in /.cargo
843
+ let cargo_home1 = cargo_home ( ) ;
844
+ let ch = format ! ( "{}" , cargo_home1. unwrap( ) . display( ) ) ;
845
+ assert ! ( ch. contains( "/.cargo" ) ) ;
846
+
847
+ env:: set_var ( "CARGO_HOME" , "/test" ) ;
848
+ let cargo_home2 = cargo_home ( ) ;
849
+ assert_eq ! ( "/test" , format!( "{}" , cargo_home2. unwrap( ) . display( ) ) ) ;
850
+ }
851
+
825
852
#[ test]
826
853
fn test_toochain_sort ( ) {
827
854
let expected = vec ! [
0 commit comments