[Request] [+- ] D10823: dirstate-tree: Fix status algorithm with unreadable directory

SimonSapin phabricator at mercurial-scm.org
Tue Jun 1 16:52:20 UTC 2021


SimonSapin created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  When reading a directory fails such as because of insufficient permissions,
  it should be treated as empty by status instead of skipped entirely.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D10823

AFFECTED FILES
  rust/hg-core/src/dirstate_tree/status.rs
  tests/test-status.t

CHANGE DETAILS

diff --git a/tests/test-status.t b/tests/test-status.t
--- a/tests/test-status.t
+++ b/tests/test-status.t
@@ -837,6 +837,23 @@
 yet by the Rust implementation of status, but includematcher is supported.
 --include is used below for that reason
 
+#if unix-permissions
+
+Not having permission to read a directory that contains tracked files makes
+status emit a warning then behave as if the directory was empty or removed
+entirely:
+
+  $ chmod 0 subdir
+  $ hg status --include subdir
+  subdir: Permission denied
+  R subdir/removed
+  ! subdir/clean
+  ! subdir/deleted
+  ! subdir/modified
+  $ chmod 755 subdir
+
+#endif
+
 Remove a directory that contains tracked files
 
   $ rm -r subdir
diff --git a/rust/hg-core/src/dirstate_tree/status.rs b/rust/hg-core/src/dirstate_tree/status.rs
--- a/rust/hg-core/src/dirstate_tree/status.rs
+++ b/rust/hg-core/src/dirstate_tree/status.rs
@@ -141,7 +141,10 @@
         ) {
             entries
         } else {
-            return Ok(());
+            // Treat an unreadable directory (typically because of insufficient
+            // permissions) like an empty directory. `self.read_dir` has
+            // already called `self.io_error` so a warning will be emitted.
+            Vec::new()
         };
 
         // `merge_join_by` requires both its input iterators to be sorted:



To: SimonSapin, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mercurial-scm.org/pipermail/mercurial-patches/attachments/20210601/cc24f561/attachment.html>


More information about the Mercurial-patches mailing list