about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-01-06 21:48:06 +0000
committerbors <bors@rust-lang.org>2021-01-06 21:48:06 +0000
commitd7769b9beacc1cd10d98590838975cbbfa1d76a7 (patch)
tree34b583cf3d09f051d6292156fb324f507ae4f7a7
parentc2de47a9aa4c9812884f341f1852e9c9610f5f7a (diff)
parent68338bc2b0c399d44362ebf7991ef76dbbf57808 (diff)
downloadrust-d7769b9beacc1cd10d98590838975cbbfa1d76a7.tar.gz
rust-d7769b9beacc1cd10d98590838975cbbfa1d76a7.zip
Auto merge of #80754 - sunfishcode:path-cleanup/rustc-fs-util, r=davidtwco
Optimize away a `fs::metadata` call.

This also eliminates a use of a `Path` convenience function, in support
of #80741, refactoring `std::path` to focus on pure data structures and
algorithms.
-rw-r--r--compiler/rustc_fs_util/src/lib.rs6
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler/rustc_fs_util/src/lib.rs b/compiler/rustc_fs_util/src/lib.rs
index 7742961e65d..87e97c746ef 100644
--- a/compiler/rustc_fs_util/src/lib.rs
+++ b/compiler/rustc_fs_util/src/lib.rs
@@ -62,8 +62,10 @@ pub enum LinkOrCopy {
 pub fn link_or_copy<P: AsRef<Path>, Q: AsRef<Path>>(p: P, q: Q) -> io::Result<LinkOrCopy> {
     let p = p.as_ref();
     let q = q.as_ref();
-    if q.exists() {
-        fs::remove_file(&q)?;
+    match fs::remove_file(&q) {
+        Ok(()) => (),
+        Err(err) if err.kind() == io::ErrorKind::NotFound => (),
+        Err(err) => return Err(err),
     }
 
     match fs::hard_link(p, q) {