about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorTamir Duberstein <tamird@gmail.com>2024-10-15 11:19:06 -0400
committerTamir Duberstein <tamird@gmail.com>2024-10-16 08:38:29 -0400
commit69be18d4e2c5783978f2c8dfcabf8a6fca5aa99c (patch)
treeac91fbc4ac7a12e078e89ee33ae574a93b451a8e /compiler
parentf39555135293d27c361b373a522b347f9328d619 (diff)
downloadrust-69be18d4e2c5783978f2c8dfcabf8a6fca5aa99c.tar.gz
rust-69be18d4e2c5783978f2c8dfcabf8a6fca5aa99c.zip
rustc_metadata: reduce repetition
Diffstat (limited to 'compiler')
-rw-r--r--compiler/rustc_metadata/src/locator.rs45
1 files changed, 18 insertions, 27 deletions
diff --git a/compiler/rustc_metadata/src/locator.rs b/compiler/rustc_metadata/src/locator.rs
index bc2f6c11552..35954ea088d 100644
--- a/compiler/rustc_metadata/src/locator.rs
+++ b/compiler/rustc_metadata/src/locator.rs
@@ -709,40 +709,31 @@ impl<'a> CrateLocator<'a> {
         let mut rmetas = FxIndexMap::default();
         let mut dylibs = FxIndexMap::default();
         for loc in &self.exact_paths {
-            if !loc.canonicalized().exists() {
-                return Err(CrateError::ExternLocationNotExist(
-                    self.crate_name,
-                    loc.original().clone(),
-                ));
+            let loc_canon = loc.canonicalized();
+            let loc_orig = loc.original();
+            if !loc_canon.exists() {
+                return Err(CrateError::ExternLocationNotExist(self.crate_name, loc_orig.clone()));
             }
-            if !loc.original().is_file() {
-                return Err(CrateError::ExternLocationNotFile(
-                    self.crate_name,
-                    loc.original().clone(),
-                ));
+            if !loc_orig.is_file() {
+                return Err(CrateError::ExternLocationNotFile(self.crate_name, loc_orig.clone()));
             }
-            let Some(file) = loc.original().file_name().and_then(|s| s.to_str()) else {
-                return Err(CrateError::ExternLocationNotFile(
-                    self.crate_name,
-                    loc.original().clone(),
-                ));
+            // Note to take care and match against the non-canonicalized name:
+            // some systems save build artifacts into content-addressed stores
+            // that do not preserve extensions, and then link to them using
+            // e.g. symbolic links. If we canonicalize too early, we resolve
+            // the symlink, the file type is lost and we might treat rlibs and
+            // rmetas as dylibs.
+            let Some(file) = loc_orig.file_name().and_then(|s| s.to_str()) else {
+                return Err(CrateError::ExternLocationNotFile(self.crate_name, loc_orig.clone()));
             };
-
             if file.starts_with("lib") && (file.ends_with(".rlib") || file.ends_with(".rmeta"))
                 || file.starts_with(self.target.dll_prefix.as_ref())
                     && file.ends_with(self.target.dll_suffix.as_ref())
             {
-                // Note to take care and match against the non-canonicalized name:
-                // some systems save build artifacts into content-addressed stores
-                // that do not preserve extensions, and then link to them using
-                // e.g. symbolic links. If we canonicalize too early, we resolve
-                // the symlink, the file type is lost and we might treat rlibs and
-                // rmetas as dylibs.
-                let loc_canon = loc.canonicalized().clone();
-                let loc = loc.original();
-                if loc.file_name().unwrap().to_str().unwrap().ends_with(".rlib") {
+                let loc_canon = loc_canon.clone();
+                if file.ends_with(".rlib") {
                     rlibs.insert(loc_canon, PathKind::ExternFlag);
-                } else if loc.file_name().unwrap().to_str().unwrap().ends_with(".rmeta") {
+                } else if file.ends_with(".rmeta") {
                     rmetas.insert(loc_canon, PathKind::ExternFlag);
                 } else {
                     dylibs.insert(loc_canon, PathKind::ExternFlag);
@@ -750,7 +741,7 @@ impl<'a> CrateLocator<'a> {
             } else {
                 self.crate_rejections
                     .via_filename
-                    .push(CrateMismatch { path: loc.original().clone(), got: String::new() });
+                    .push(CrateMismatch { path: loc_orig.clone(), got: String::new() });
             }
         }