@@ -5,6 +5,9 @@ extern crate rustup_utils;
5
5
extern crate rustup_mock;
6
6
extern crate tempdir;
7
7
8
+ use std:: fs;
9
+ use std:: process;
10
+ use rustup_utils:: raw;
8
11
use rustup_mock:: clitools:: { self , Config , Scenario ,
9
12
expect_ok, expect_ok_ex,
10
13
expect_stdout_ok,
@@ -544,3 +547,135 @@ fn remove_component() {
544
547
assert ! ( !path. parent( ) . unwrap( ) . exists( ) ) ;
545
548
} ) ;
546
549
}
550
+
551
+ // Run without setting RUSTUP_HOME, with setting HOME and USERPROFILE
552
+ fn run_no_home ( config : & Config , args : & [ & str ] , env : & [ ( & str , & str ) ] ) -> process:: Output {
553
+ let home_dir_str = & format ! ( "{}" , config. homedir. display( ) ) ;
554
+ let mut cmd = clitools:: cmd ( config, "rustup" , args) ;
555
+ clitools:: env ( config, & mut cmd) ;
556
+ cmd. env_remove ( "RUSTUP_HOME" ) ;
557
+ cmd. env ( "HOME" , home_dir_str) ;
558
+ cmd. env ( "USERPROFILE" , home_dir_str) ;
559
+ for & ( name, val) in env {
560
+ cmd. env ( name, val) ;
561
+ }
562
+ let out = cmd. output ( ) . unwrap ( ) ;
563
+ assert ! ( out. status. success( ) ) ;
564
+
565
+ out
566
+ }
567
+
568
+ // Rename ~/.multirust to ~/.rustup
569
+ #[ test]
570
+ fn multirust_dir_upgrade_rename_multirust_dir_to_rustup ( ) {
571
+ setup ( & |config| {
572
+ let multirust_dir = config. homedir . join ( ".multirust" ) ;
573
+ let rustup_dir = config. homedir . join ( ".rustup" ) ;
574
+ let multirust_dir_str = & format ! ( "{}" , multirust_dir. display( ) ) ;
575
+
576
+ // First write data into ~/.multirust
577
+ run_no_home ( config, & [ "default" , "stable" ] ,
578
+ & [ ( "RUSTUP_HOME" , multirust_dir_str) ] ) ;
579
+ let out = run_no_home ( config, & [ "toolchain" , "list" ] ,
580
+ & [ ( "RUSTUP_HOME" , multirust_dir_str) ] ) ;
581
+ assert ! ( String :: from_utf8( out. stdout) . unwrap( ) . contains( "stable" ) ) ;
582
+
583
+ assert ! ( multirust_dir. exists( ) ) ;
584
+ assert ! ( !rustup_dir. exists( ) ) ;
585
+
586
+ // Next run without RUSTUP_DIR, but with HOME/USERPROFILE set so rustup
587
+ // can infer RUSTUP_DIR. It will silently move ~/.multirust to
588
+ // ~/.rustup.
589
+ let out = run_no_home ( config, & [ "toolchain" , "list" ] , & [ ] ) ;
590
+ assert ! ( String :: from_utf8( out. stdout) . unwrap( ) . contains( "stable" ) ) ;
591
+
592
+ assert ! ( !multirust_dir. exists( ) ) ;
593
+ assert ! ( rustup_dir. exists( ) ) ;
594
+ } ) ;
595
+ }
596
+
597
+ // Renaming ~/.multirust to ~/.rustup but ~/.rustup/rustup-version (rustup.sh) exists
598
+ #[ test]
599
+ fn multirust_dir_upgrade_old_rustup_exists ( ) {
600
+ setup ( & |config| {
601
+ let multirust_dir = config. homedir . join ( ".multirust" ) ;
602
+ let rustup_dir = config. homedir . join ( ".rustup" ) ;
603
+ let rustup_sh_dir = config. homedir . join ( ".rustup.sh" ) ;
604
+
605
+ let multirust_dir_str = & format ! ( "{}" , multirust_dir. display( ) ) ;
606
+ let old_rustup_sh_version_file = rustup_dir. join ( "rustup-version" ) ;
607
+ let new_rustup_sh_version_file = rustup_sh_dir. join ( "rustup-version" ) ;
608
+
609
+ // First write data into ~/.multirust
610
+ run_no_home ( config, & [ "default" , "stable" ] ,
611
+ & [ ( "RUSTUP_HOME" , multirust_dir_str) ] ) ;
612
+ let out = run_no_home ( config, & [ "toolchain" , "list" ] ,
613
+ & [ ( "RUSTUP_HOME" , multirust_dir_str) ] ) ;
614
+ assert ! ( String :: from_utf8( out. stdout) . unwrap( ) . contains( "stable" ) ) ;
615
+
616
+ assert ! ( multirust_dir. exists( ) ) ;
617
+ assert ! ( !rustup_dir. exists( ) ) ;
618
+
619
+ // Now add rustup.sh data to ~/.rustup
620
+ fs:: create_dir_all ( & rustup_dir) . unwrap ( ) ;
621
+ raw:: write_file ( & old_rustup_sh_version_file, "1" ) . unwrap ( ) ;
622
+ assert ! ( old_rustup_sh_version_file. exists( ) ) ;
623
+
624
+ // Now do the upgrade, and ~/.rustup will be moved to ~/.rustup.sh
625
+ let out = run_no_home ( config, & [ "toolchain" , "list" ] , & [ ] ) ;
626
+ assert ! ( String :: from_utf8( out. stdout) . unwrap( ) . contains( "stable" ) ) ;
627
+
628
+ assert ! ( !multirust_dir. exists( ) ) ;
629
+ assert ! ( rustup_dir. exists( ) ) ;
630
+ assert ! ( !old_rustup_sh_version_file. exists( ) ) ;
631
+ assert ! ( new_rustup_sh_version_file. exists( ) ) ;
632
+ } ) ;
633
+ }
634
+
635
+ // Renaming ~/.multirust to ~/.rustup but ~/.rustup/rustup-version (rustup.sh) exists,
636
+ // oh and alse ~/.rustup.sh exists
637
+ #[ test]
638
+ fn multirust_dir_upgrade_old_rustup_existsand_new_rustup_sh_exists ( ) {
639
+ setup ( & |config| {
640
+ let multirust_dir = config. homedir . join ( ".multirust" ) ;
641
+ let rustup_dir = config. homedir . join ( ".rustup" ) ;
642
+ let rustup_sh_dir = config. homedir . join ( ".rustup.sh" ) ;
643
+
644
+ let multirust_dir_str = & format ! ( "{}" , multirust_dir. display( ) ) ;
645
+ let old_rustup_sh_version_file = rustup_dir. join ( "rustup-version" ) ;
646
+ let new_rustup_sh_version_file = rustup_sh_dir. join ( "rustup-version" ) ;
647
+
648
+ // First write data into ~/.multirust
649
+ run_no_home ( config, & [ "default" , "stable" ] ,
650
+ & [ ( "RUSTUP_HOME" , multirust_dir_str) ] ) ;
651
+ let out = run_no_home ( config, & [ "toolchain" , "list" ] ,
652
+ & [ ( "RUSTUP_HOME" , multirust_dir_str) ] ) ;
653
+ assert ! ( String :: from_utf8( out. stdout) . unwrap( ) . contains( "stable" ) ) ;
654
+
655
+ assert ! ( multirust_dir. exists( ) ) ;
656
+ assert ! ( !rustup_dir. exists( ) ) ;
657
+
658
+ // This time there are two things that look like rustup.sh.
659
+ // Only one can win. It doesn't matter much which.
660
+
661
+ // Now add rustup.sh data to ~/.rustup
662
+ fs:: create_dir_all ( & rustup_dir) . unwrap ( ) ;
663
+ raw:: write_file ( & old_rustup_sh_version_file, "1" ) . unwrap ( ) ;
664
+
665
+ // Also to ~/.rustup.sh
666
+ fs:: create_dir_all ( & rustup_sh_dir) . unwrap ( ) ;
667
+ raw:: write_file ( & new_rustup_sh_version_file, "1" ) . unwrap ( ) ;
668
+
669
+ assert ! ( old_rustup_sh_version_file. exists( ) ) ;
670
+ assert ! ( new_rustup_sh_version_file. exists( ) ) ;
671
+
672
+ // Now do the upgrade, and ~/.rustup will be moved to ~/.rustup.sh
673
+ let out = run_no_home ( config, & [ "toolchain" , "list" ] , & [ ] ) ;
674
+ assert ! ( String :: from_utf8( out. stdout) . unwrap( ) . contains( "stable" ) ) ;
675
+
676
+ assert ! ( !multirust_dir. exists( ) ) ;
677
+ assert ! ( rustup_dir. exists( ) ) ;
678
+ assert ! ( !old_rustup_sh_version_file. exists( ) ) ;
679
+ assert ! ( new_rustup_sh_version_file. exists( ) ) ;
680
+ } ) ;
681
+ }
0 commit comments