11use crate :: { MescCliError , SetupArgs } ;
22use mesc:: { MescError , RpcConfig } ;
33use toolstr:: Colorize ;
4+ use std:: path:: PathBuf ;
45
56use super :: { config_modification:: * , inquire_utils:: * , selectors:: * , shell_config:: * , writing:: * } ;
67
@@ -9,7 +10,7 @@ pub(crate) async fn setup_command(args: SetupArgs) -> Result<(), MescCliError> {
910 if args. editor {
1011 edit_config_in_editor ( args)
1112 } else {
12- let mode = get_write_mode ( ) ?;
13+ let ( mode, shell_config_modified ) = get_write_mode ( ) ?;
1314 let config = load_config_data ( & mode) ?;
1415 let endpoint_word = if config. endpoints . len ( ) == 1 { "endpoint" } else { "endpoints" } ;
1516 let profile_word = if config. profiles . len ( ) == 1 { "profile" } else { "profiles" } ;
@@ -21,7 +22,12 @@ pub(crate) async fn setup_command(args: SetupArgs) -> Result<(), MescCliError> {
2122 profile_word,
2223 ) ;
2324 println ! ( ) ;
24- modify_existing_config ( config, Some ( mode) ) . await
25+ let result = modify_existing_config ( config, Some ( mode) ) . await ;
26+ if shell_config_modified {
27+ println ! ( ) ;
28+ println ! ( "{}" , "Shell config files were modified. Restart shell to load these files." . magenta( ) )
29+ }
30+ result
2531 }
2632}
2733
@@ -39,7 +45,7 @@ fn edit_config_in_editor(args: SetupArgs) -> Result<(), MescCliError> {
3945}
4046
4147/// get write mode for config
42- fn get_write_mode ( ) -> Result < ConfigWriteMode , MescCliError > {
48+ fn get_write_mode ( ) -> Result < ( ConfigWriteMode , bool ) , MescCliError > {
4349 match (
4450 std:: env:: var ( "MESC_MODE" ) . as_deref ( ) ,
4551 std:: env:: var ( "MESC_PATH" ) . as_deref ( ) ,
@@ -55,18 +61,17 @@ fn get_write_mode() -> Result<ConfigWriteMode, MescCliError> {
5561 "ENV" . green( ) . bold( )
5662 ) ;
5763 let config_mode = select_config_mode ( ) ?;
58- setup_mesc_mode_env_var ( & config_mode) ?;
59- setup_mesc_env_vars ( & config_mode) ?;
60- Ok ( config_mode)
64+ let modified_first = setup_mesc_mode_env_var ( & config_mode) ?;
65+ let modified_second = setup_mesc_env_vars ( & config_mode) ?;
66+ Ok ( ( config_mode, !modified_first . is_empty ( ) || !modified_second . is_empty ( ) ) )
6167 }
6268 ( Ok ( "PATH" ) , Ok ( path) , _, _) | ( Err ( _) , Ok ( path) , _, _) => {
6369 let path = mesc:: load:: expand_path ( path) ?;
6470 println ! ( " MESC is {}" , "enabled" . green( ) . bold( ) ) ;
6571 let print_path =
6672 if let Ok ( raw_path) = std:: env:: var ( "MESC_PATH" ) { raw_path } else { path. clone ( ) } ;
6773 println ! ( " Using {}{}" , "MESC_PATH=" . green( ) . bold( ) , print_path. green( ) . bold( ) ) ;
68-
69- Ok ( ConfigWriteMode :: Path ( path. into ( ) ) )
74+ Ok ( ( ConfigWriteMode :: Path ( path. into ( ) ) , false ) )
7075 }
7176 ( Ok ( "PATH" ) , Err ( _) , _, _) => {
7277 println ! ( " MESC is enabled" ) ;
@@ -77,13 +82,13 @@ fn get_write_mode() -> Result<ConfigWriteMode, MescCliError> {
7782 ) ;
7883 let path = select_config_path ( ) ?;
7984 println ! ( " Using config path: {}" , path. to_string_lossy( ) . green( ) . bold( ) ) ;
80- setup_mesc_path_env_var ( & path) ?;
81- Ok ( ConfigWriteMode :: Path ( path) )
85+ let modified_files = setup_mesc_path_env_var ( & path) ?;
86+ Ok ( ( ConfigWriteMode :: Path ( path) , !modified_files . is_empty ( ) ) )
8287 }
8388 ( Ok ( "ENV" ) , _, Ok ( _env) , _) | ( Err ( _) , Err ( _) , Ok ( _env) , _) => {
8489 println ! ( " MESC is enabled" ) ;
8590 println ! ( " Using {}" , "MESC_MODE=ENV" . green( ) . bold( ) ) ;
86- Ok ( ConfigWriteMode :: Env ( vec ! [ ] ) )
91+ Ok ( ( ConfigWriteMode :: Env ( vec ! [ ] ) , false ) )
8792 }
8893 ( Ok ( "ENV" ) , _, Err ( _) , _) => {
8994 println ! ( " MESC is enabled" ) ;
@@ -92,7 +97,7 @@ fn get_write_mode() -> Result<ConfigWriteMode, MescCliError> {
9297 "MESC_MODE=ENV" . green( ) . bold( ) ,
9398 "MESC_ENV" . green( ) . bold( )
9499 ) ;
95- Ok ( ConfigWriteMode :: Env ( vec ! [ ] ) )
100+ Ok ( ( ConfigWriteMode :: Env ( vec ! [ ] ) , false ) )
96101 }
97102 ( Ok ( other) , _, _, _) => {
98103 eprintln ! ( "Invaild value for {}: {}" , "MESC_MODE" . green( ) . bold( ) , other. green( ) . bold( ) ) ;
@@ -112,15 +117,15 @@ fn get_write_mode() -> Result<ConfigWriteMode, MescCliError> {
112117 "MESC_ENV" . green( ) . bold( )
113118 ) ;
114119 let mode = select_config_mode ( ) ?;
115- setup_mesc_env_vars ( & mode) ?;
116- Ok ( mode)
120+ let modified_files = setup_mesc_env_vars ( & mode) ?;
121+ Ok ( ( mode, !modified_files . is_empty ( ) ) )
117122 }
118123 ( Err ( _) , Err ( _) , Err ( _) , false ) => {
119124 println ! ( " MESC is disabled because no MESC env vars are set" ) ;
120125 println ! ( " To enabled MESC, set one of the MESC env vars" ) ;
121126 let mode = select_config_mode ( ) ?;
122- setup_mesc_env_vars ( & mode) ?;
123- Ok ( mode)
127+ let modified_files = setup_mesc_env_vars ( & mode) ?;
128+ Ok ( ( mode, !modified_files . is_empty ( ) ) )
124129 }
125130 }
126131}
@@ -210,24 +215,22 @@ fn load_config_data(mode: &ConfigWriteMode) -> Result<RpcConfig, MescCliError> {
210215 Ok ( config)
211216}
212217
213- fn setup_mesc_mode_env_var ( mode : & ConfigWriteMode ) -> Result < ( ) , MescCliError > {
218+ fn setup_mesc_mode_env_var ( mode : & ConfigWriteMode ) -> Result < Vec < PathBuf > , MescCliError > {
214219 let value = match mode {
215220 ConfigWriteMode :: Path ( _) => "PATH" ,
216221 ConfigWriteMode :: Env ( _) => "ENV" ,
217222 } ;
218- modify_shell_config_var ( "MESC_MODE" , value. to_string ( ) , None ) ?;
219- Ok ( ( ) )
223+ modify_shell_config_var ( "MESC_MODE" , value. to_string ( ) , None )
220224}
221225
222- fn setup_mesc_env_vars ( mode : & ConfigWriteMode ) -> Result < ( ) , MescCliError > {
226+ fn setup_mesc_env_vars ( mode : & ConfigWriteMode ) -> Result < Vec < PathBuf > , MescCliError > {
223227 match mode {
224228 ConfigWriteMode :: Path ( path) => setup_mesc_path_env_var ( path) ,
225- ConfigWriteMode :: Env ( _) => Ok ( ( ) ) ,
229+ ConfigWriteMode :: Env ( _) => Ok ( vec ! [ ] ) ,
226230 }
227231}
228232
229- fn setup_mesc_path_env_var ( path : & std:: path:: Path ) -> Result < ( ) , MescCliError > {
233+ fn setup_mesc_path_env_var ( path : & std:: path:: Path ) -> Result < Vec < PathBuf > , MescCliError > {
230234 let value = path. to_string_lossy ( ) . to_string ( ) ;
231- modify_shell_config_var ( "MESC_PATH" , value, None ) ?;
232- Ok ( ( ) )
235+ modify_shell_config_var ( "MESC_PATH" , value, None )
233236}
0 commit comments