status: fix hg status race against file deletion
Differential Revision: https://phab.mercurial-scm.org/D12202
--- 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" {