@@ -706,49 +706,45 @@ impl<'a> CrateLocator<'a> {
706
706
let mut rmetas = FxIndexMap :: default ( ) ;
707
707
let mut dylibs = FxIndexMap :: default ( ) ;
708
708
for loc in & self . exact_paths {
709
- if ! loc. canonicalized ( ) . exists ( ) {
710
- return Err ( CrateError :: ExternLocationNotExist (
711
- self . crate_name ,
712
- loc . original ( ) . clone ( ) ,
713
- ) ) ;
709
+ let canon_loc = loc. canonicalized ( ) ;
710
+ let og_loc = loc . original ( ) ;
711
+
712
+ if !canon_loc . exists ( ) {
713
+ return Err ( CrateError :: ExternLocationNotExist ( self . crate_name , og_loc . clone ( ) ) ) ;
714
714
}
715
- if !loc. original ( ) . is_file ( ) {
716
- return Err ( CrateError :: ExternLocationNotFile (
717
- self . crate_name ,
718
- loc. original ( ) . clone ( ) ,
719
- ) ) ;
715
+ if !og_loc. is_file ( ) {
716
+ return Err ( CrateError :: ExternLocationNotFile ( self . crate_name , og_loc. clone ( ) ) ) ;
720
717
}
721
- let Some ( file) = loc. original ( ) . file_name ( ) . and_then ( |s| s. to_str ( ) ) else {
722
- return Err ( CrateError :: ExternLocationNotFile (
723
- self . crate_name ,
724
- loc. original ( ) . clone ( ) ,
725
- ) ) ;
718
+
719
+ let Some ( file) = og_loc. file_name ( ) . and_then ( |s| s. to_str ( ) ) else {
720
+ return Err ( CrateError :: ExternLocationNotFile ( self . crate_name , og_loc. clone ( ) ) ) ;
726
721
} ;
727
722
728
- if file. starts_with ( "lib" ) && ( file. ends_with ( ".rlib" ) || file. ends_with ( ".rmeta" ) )
729
- || file. starts_with ( self . target . dll_prefix . as_ref ( ) )
730
- && file. ends_with ( self . target . dll_suffix . as_ref ( ) )
731
- {
732
- // Make sure there's at most one rlib and at most one dylib.
733
- // Note to take care and match against the non-canonicalized name:
734
- // some systems save build artifacts into content-addressed stores
735
- // that do not preserve extensions, and then link to them using
736
- // e.g. symbolic links. If we canonicalize too early, we resolve
737
- // the symlink, the file type is lost and we might treat rlibs and
738
- // rmetas as dylibs.
739
- let loc_canon = loc. canonicalized ( ) . clone ( ) ;
740
- let loc = loc. original ( ) ;
741
- if loc. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) . ends_with ( ".rlib" ) {
742
- rlibs. insert ( loc_canon, PathKind :: ExternFlag ) ;
743
- } else if loc. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) . ends_with ( ".rmeta" ) {
744
- rmetas. insert ( loc_canon, PathKind :: ExternFlag ) ;
745
- } else {
746
- dylibs. insert ( loc_canon, PathKind :: ExternFlag ) ;
747
- }
723
+ let rlib_like =
724
+ |file_name : & str | file_name. starts_with ( "lib" ) && file_name. ends_with ( ".rlib" ) ;
725
+ let rmeta_like =
726
+ |file_name : & str | file_name. starts_with ( "lib" ) && file_name. ends_with ( ".rmeta" ) ;
727
+ let dll_like = |file_name : & str | {
728
+ file_name. starts_with ( self . target . dll_prefix . as_ref ( ) )
729
+ && file_name. ends_with ( self . target . dll_suffix . as_ref ( ) )
730
+ } ;
731
+
732
+ // Make sure there's at most one rlib and at most one dylib.
733
+ //
734
+ // Note to take care and match against the non-canonicalized name: some systems save
735
+ // build artifacts into content-addressed stores that do not preserve extensions, and
736
+ // then link to them using e.g. symbolic links. If we canonicalize too early, we resolve
737
+ // the symlink, the file type is lost and we might treat rlibs and rmetas as dylibs.
738
+ if rlib_like ( file) {
739
+ rlibs. insert ( canon_loc. clone ( ) , PathKind :: ExternFlag ) ;
740
+ } else if rmeta_like ( file) {
741
+ rmetas. insert ( canon_loc. clone ( ) , PathKind :: ExternFlag ) ;
742
+ } else if dll_like ( file) {
743
+ dylibs. insert ( canon_loc. clone ( ) , PathKind :: ExternFlag ) ;
748
744
} else {
749
745
self . crate_rejections
750
746
. via_filename
751
- . push ( CrateMismatch { path : loc . original ( ) . clone ( ) , got : String :: new ( ) } ) ;
747
+ . push ( CrateMismatch { path : og_loc . clone ( ) , got : String :: new ( ) } ) ;
752
748
}
753
749
}
754
750
0 commit comments