@@ -275,7 +275,12 @@ Arguments:
275275 } ;
276276 // Get any optional paths which occur after the subcommand
277277 let cwd = t ! ( env:: current_dir( ) ) ;
278- let paths = matches. free [ 1 ..] . iter ( ) . map ( |p| cwd. join ( p) ) . collect :: < Vec < _ > > ( ) ;
278+ let src = matches. opt_str ( "src" ) . map ( PathBuf :: from)
279+ . or_else ( || env:: var_os ( "SRC" ) . map ( PathBuf :: from) )
280+ . unwrap_or ( cwd. clone ( ) ) ;
281+ let paths = matches. free [ 1 ..] . iter ( ) . map ( |p| {
282+ cwd. join ( p) . strip_prefix ( & src) . expect ( "paths passed to be inside checkout" ) . into ( )
283+ } ) . collect :: < Vec < PathBuf > > ( ) ;
279284
280285 let cfg_file = matches. opt_str ( "config" ) . map ( PathBuf :: from) . or_else ( || {
281286 if fs:: metadata ( "config.toml" ) . is_ok ( ) {
@@ -360,10 +365,6 @@ Arguments:
360365 stage = Some ( 1 ) ;
361366 }
362367
363- let src = matches. opt_str ( "src" ) . map ( PathBuf :: from)
364- . or_else ( || env:: var_os ( "SRC" ) . map ( PathBuf :: from) )
365- . unwrap_or ( cwd. clone ( ) ) ;
366-
367368 Flags {
368369 verbose : matches. opt_count ( "verbose" ) ,
369370 stage,
@@ -375,12 +376,14 @@ Arguments:
375376 target : split ( matches. opt_strs ( "target" ) )
376377 . into_iter ( ) . map ( |x| INTERNER . intern_string ( x) ) . collect :: < Vec < _ > > ( ) ,
377378 config : cfg_file,
378- src,
379379 jobs : matches. opt_str ( "jobs" ) . map ( |j| j. parse ( ) . unwrap ( ) ) ,
380380 cmd,
381381 incremental : matches. opt_present ( "incremental" ) ,
382382 exclude : split ( matches. opt_strs ( "exclude" ) )
383- . into_iter ( ) . map ( |p| cwd. join ( p) ) . collect :: < Vec < _ > > ( ) ,
383+ . into_iter ( ) . map ( |p| {
384+ cwd. join ( p) . strip_prefix ( & src) . expect ( "paths to be inside checkout" ) . into ( )
385+ } ) . collect :: < Vec < _ > > ( ) ,
386+ src,
384387 }
385388 }
386389}
0 commit comments