summaryrefslogtreecommitdiff
path: root/compiler/rustc_fs_util
diff options
context:
space:
mode:
authorDan Gohman <dev@sunfishcode.online>2021-01-06 08:20:58 -0800
committerDan Gohman <dev@sunfishcode.online>2021-01-06 08:33:15 -0800
commit68338bc2b0c399d44362ebf7991ef76dbbf57808 (patch)
treef02fc7f520651506cb19cc9a72647c12553e323c /compiler/rustc_fs_util
parentda305a2b00530aa34dea4e48389204c26fa35dbb (diff)
downloadrust-68338bc2b0c399d44362ebf7991ef76dbbf57808.tar.gz
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.
Diffstat (limited to 'compiler/rustc_fs_util')
-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) {