@@ -12,7 +12,7 @@ use anyhow::{Context, Result};
1212use cli:: Cli ;
1313use executor:: execute_binary;
1414use installer:: ensure_installed;
15- use paths:: resolve_binary_path;
15+ use paths:: { resolve_binary_path, resolve_cargox_binary_path } ;
1616use target:: { Target , parse_spec} ;
1717
1818fn main ( ) {
@@ -49,7 +49,15 @@ fn parse_target_from_cli(cli: &Cli) -> Result<Target> {
4949}
5050
5151fn should_use_existing_binary ( cli : & Cli , target : & Target ) -> bool {
52- !cli. force && find_existing_binary ( & target. binary ) . is_some ( )
52+ if cli. force {
53+ return false ;
54+ }
55+
56+ if target. version . is_some ( ) {
57+ return false ;
58+ }
59+
60+ find_existing_binary ( & target. binary ) . is_some ( )
5361}
5462
5563fn run_existing_binary ( target : & Target , cli : & Cli ) -> Result < ExitStatus > {
@@ -60,17 +68,26 @@ fn run_existing_binary(target: &Target, cli: &Cli) -> Result<ExitStatus> {
6068
6169fn install_and_run_binary ( target : & Target , cli : & Cli ) -> Result < ExitStatus > {
6270 ensure_installed ( target, cli) ?;
63- let binary_path = locate_installed_binary ( & target. binary ) ?;
71+ let binary_path = locate_installed_binary ( target) ?;
6472 execute_binary ( & binary_path, & cli. args )
6573}
6674
6775fn find_existing_binary ( name : & str ) -> Option < PathBuf > {
6876 resolve_binary_path ( name) . ok ( )
6977}
7078
71- fn locate_installed_binary ( binary_name : & str ) -> Result < PathBuf > {
72- resolve_binary_path ( binary_name)
73- . with_context ( || format ! ( "{binary_name} should be on PATH after installation" ) )
79+ fn locate_installed_binary ( target : & Target ) -> Result < PathBuf > {
80+ if target. version . is_some ( ) {
81+ return resolve_cargox_binary_path ( & target. binary ) . with_context ( || {
82+ format ! (
83+ "{} should be available in cargox's install directory after installation" ,
84+ target. binary
85+ )
86+ } ) ;
87+ }
88+
89+ resolve_binary_path ( & target. binary )
90+ . with_context ( || format ! ( "{} should be on PATH after installation" , target. binary) )
7491}
7592
7693fn exit_with_status ( status : ExitStatus ) -> ! {
0 commit comments