File tree Expand file tree Collapse file tree 1 file changed +17
-5
lines changed
src/bootstrap/src/core/builder Expand file tree Collapse file tree 1 file changed +17
-5
lines changed Original file line number Diff line number Diff line change @@ -590,18 +590,30 @@ impl StepDescription {
590
590
// Attempt to resolve paths to be relative to the builder source directory.
591
591
let mut paths: Vec < PathBuf > = paths
592
592
. iter ( )
593
- . map ( |p| {
593
+ . map ( |original_path| {
594
+ let mut path = original_path. clone ( ) ;
595
+
596
+ // Someone could run `x <cmd> <path>` from a different repository than the source
597
+ // directory.
598
+ // In that case, we should not try to resolve the paths relative to the working
599
+ // directory, but rather relative to the source directory.
600
+ // So we forcefully "relocate" the path to the source directory here.
601
+ if !path. is_absolute ( ) {
602
+ path = builder. src . join ( path) ;
603
+ }
604
+
594
605
// If the path does not exist, it may represent the name of a Step, such as `tidy` in `x test tidy`
595
- if !p. exists ( ) {
596
- return p. clone ( ) ;
606
+ if !path. exists ( ) {
607
+ // Use the original path here
608
+ return original_path. clone ( ) ;
597
609
}
598
610
599
611
// Make the path absolute, strip the prefix, and convert to a PathBuf.
600
- match std:: path:: absolute ( p ) {
612
+ match std:: path:: absolute ( & path ) {
601
613
Ok ( p) => p. strip_prefix ( & builder. src ) . unwrap_or ( & p) . to_path_buf ( ) ,
602
614
Err ( e) => {
603
615
eprintln ! ( "ERROR: {e:?}" ) ;
604
- panic ! ( "Due to the above error, failed to resolve path: {p :?}" ) ;
616
+ panic ! ( "Due to the above error, failed to resolve path: {path :?}" ) ;
605
617
}
606
618
}
607
619
} )
You can’t perform that action at this time.
0 commit comments