14
14
15
15
#![ recursion_limit = "1024" ]
16
16
17
- use std:: env;
18
17
use std:: path:: PathBuf ;
19
18
20
19
use rs_tracing:: * ;
@@ -25,41 +24,46 @@ use rustup::cli::proxy_mode;
25
24
use rustup:: cli:: rustup_mode;
26
25
use rustup:: cli:: self_update;
27
26
use rustup:: cli:: setup_mode;
27
+ use rustup:: currentprocess:: { process, with, OSProcess } ;
28
28
use rustup:: env_var:: RUST_RECURSION_COUNT_MAX ;
29
29
use rustup:: utils:: utils;
30
30
31
31
fn main ( ) {
32
- if let Err ( ref e) = run_rustup ( ) {
33
- common:: report_error ( e) ;
34
- std:: process:: exit ( 1 ) ;
35
- }
32
+ let process = OSProcess :: default ( ) ;
33
+ with ( Box :: new ( process) , || match run_rustup ( ) {
34
+ Err ( ref e) => {
35
+ common:: report_error ( e) ;
36
+ std:: process:: exit ( 1 ) ;
37
+ }
38
+ Ok ( utils:: ExitCode ( c) ) => std:: process:: exit ( c) ,
39
+ } ) ;
36
40
}
37
41
38
- fn run_rustup ( ) -> Result < ( ) > {
39
- if let Ok ( dir) = env :: var ( "RUSTUP_TRACE_DIR" ) {
42
+ fn run_rustup ( ) -> Result < utils :: ExitCode > {
43
+ if let Ok ( dir) = process ( ) . var ( "RUSTUP_TRACE_DIR" ) {
40
44
open_trace_file ! ( dir) ?;
41
45
}
42
46
let result = run_rustup_inner ( ) ;
43
- if env :: var ( "RUSTUP_TRACE_DIR" ) . is_ok ( ) {
47
+ if process ( ) . var ( "RUSTUP_TRACE_DIR" ) . is_ok ( ) {
44
48
close_trace_file ! ( ) ;
45
49
}
46
50
result
47
51
}
48
52
49
- fn run_rustup_inner ( ) -> Result < ( ) > {
53
+ fn run_rustup_inner ( ) -> Result < utils :: ExitCode > {
50
54
// Guard against infinite proxy recursion. This mostly happens due to
51
55
// bugs in rustup.
52
56
do_recursion_guard ( ) ?;
53
57
54
58
// Before we do anything else, ensure we know where we are and who we
55
59
// are because otherwise we cannot proceed usefully.
56
- utils :: current_dir ( ) ?;
60
+ process ( ) . current_dir ( ) ?;
57
61
utils:: current_exe ( ) ?;
58
62
59
63
// The name of arg0 determines how the program is going to behave
60
- let arg0 = match env :: var ( "RUSTUP_FORCE_ARG0" ) {
64
+ let arg0 = match process ( ) . var ( "RUSTUP_FORCE_ARG0" ) {
61
65
Ok ( v) => Some ( v) ,
62
- Err ( _) => env :: args ( ) . next ( ) ,
66
+ Err ( _) => process ( ) . args ( ) . next ( ) ,
63
67
}
64
68
. map ( PathBuf :: from) ;
65
69
let name = arg0
@@ -90,7 +94,8 @@ fn run_rustup_inner() -> Result<()> {
90
94
}
91
95
92
96
fn do_recursion_guard ( ) -> Result < ( ) > {
93
- let recursion_count = env:: var ( "RUST_RECURSION_COUNT" )
97
+ let recursion_count = process ( )
98
+ . var ( "RUST_RECURSION_COUNT" )
94
99
. ok ( )
95
100
. and_then ( |s| s. parse ( ) . ok ( ) )
96
101
. unwrap_or ( 0 ) ;
0 commit comments