11use super :: command:: Command ;
2+ use super :: r#use:: Use ;
23use crate :: alias:: create_alias;
34use crate :: arch:: get_safe_arch;
45use crate :: config:: FnmConfig ;
@@ -8,6 +9,7 @@ use crate::outln;
89use crate :: progress:: ProgressConfig ;
910use crate :: remote_node_index;
1011use crate :: user_version:: UserVersion ;
12+ use crate :: user_version_reader:: UserVersionReader ;
1113use crate :: version:: Version ;
1214use crate :: version_files:: get_user_version_for_directory;
1315use colored:: Colorize ;
@@ -32,6 +34,10 @@ pub struct Install {
3234#[ clap( long, default_value_t) ]
3335#[ arg( value_enum) ]
3436pub progress : ProgressConfig ,
37+
38+ /// Use the installed version immediately after installation
39+ #[ clap( long) ]
40+ pub r#use : bool ,
3541}
3642
3743impl Install {
@@ -66,6 +72,7 @@ impl Command for Install {
6672fn apply ( self , config : & FnmConfig ) ->Result < ( ) , Self :: Error > {
6773let current_dir = std:: env:: current_dir ( ) . unwrap ( ) ;
6874let show_progress =self . progress . enabled ( config) ;
75+ let use_installed =self . r#use ;
6976
7077let current_version =self
7178. version ( ) ?
@@ -165,6 +172,10 @@ impl Command for Install {
165172enable_corepack ( & version, config) ?;
166173}
167174
175+ if use_installed{
176+ use_installed_version ( & version, config) ?;
177+ }
178+
168179Ok ( ( ) )
169180}
170181}
@@ -194,6 +205,21 @@ fn enable_corepack(version: &Version, config: &FnmConfig) -> Result<(), Error> {
194205Ok ( ( ) )
195206}
196207
208+ fn use_installed_version ( version : & Version , config : & FnmConfig ) ->Result < ( ) , Error > {
209+ Use {
210+ version : Some ( UserVersionReader :: Direct ( UserVersion :: Full (
211+ version. clone ( ) ,
212+ ) ) ) ,
213+ install_if_missing : false ,
214+ silent_if_unchanged : false ,
215+ }
216+ . apply ( config)
217+ . map_err ( |source|Error :: UseError {
218+ source : Box :: new ( source) ,
219+ } ) ?;
220+ Ok ( ( ) )
221+ }
222+
197223#[ derive( Debug , Error ) ]
198224pub enum Error {
199225#[ error( "Can't download the requested binary: {}" , source) ]
@@ -208,6 +234,10 @@ pub enum Error {
208234#[ from]
209235source : super :: exec:: Error ,
210236} ,
237+ #[ error( transparent) ]
238+ UseError {
239+ source : Box < <Use as Command >:: Error > ,
240+ } ,
211241#[ error( "Can't find version in dotfiles. Please provide a version manually to the command." ) ]
212242CantInferVersion ,
213243#[ error( transparent) ]
@@ -244,6 +274,7 @@ mod tests {
244274lts : false ,
245275latest : false ,
246276progress : ProgressConfig :: Never ,
277+ r#use : false ,
247278}
248279. apply ( & config)
249280. expect ( "Can't install" ) ;
@@ -270,6 +301,7 @@ mod tests {
270301lts : false ,
271302latest : true ,
272303progress : ProgressConfig :: Never ,
304+ r#use : false ,
273305}
274306. apply ( & config)
275307. expect ( "Can't install" ) ;