diff rust/hg-core/src/dirstate_tree/status.rs @ 48774:dcec16e799dd stable 6.0.3

status: fix hg status race against file deletion Differential Revision: https://phab.mercurial-scm.org/D12202
author Arseniy Alekseyev <aalekseyev@janestreet.com>
date Thu, 17 Feb 2022 20:50:04 +0000
parents 83d0bd45b662
children 834c938227c6
line wrap: on
line diff
--- a/rust/hg-core/src/dirstate_tree/status.rs	Wed Aug 25 19:55:20 2021 -0700
+++ b/rust/hg-core/src/dirstate_tree/status.rs	Thu Feb 17 20:50:04 2022 +0000
@@ -713,7 +713,17 @@
         let mut results = Vec::new();
         for entry in path.read_dir()? {
             let entry = entry?;
-            let metadata = entry.metadata()?;
+            let metadata = match entry.metadata() {
+                Ok(v) => v,
+                Err(e) => {
+                    // race with file deletion?
+                    if e.kind() == std::io::ErrorKind::NotFound {
+                        continue;
+                    } else {
+                        return Err(e);
+                    }
+                }
+            };
             let name = get_bytes_from_os_string(entry.file_name());
             // FIXME don't do this when cached
             if name == b".hg" {