Subject: bug#39380: 26.3: Opening files in vc-dir-mode with differing root and working dir fails

From: Dmitry Gutov <[email-masked]>
Date: Wed, 5 Feb 2020 18:56:01 +0300

On 04.02.2020 19:04, Wolfgang Scherer wrote:
> Reverting de76a167dc09dc695a5acebabb7ab354a6bf556e does not change anything for me.
> 
> I had to revert 06083cf41c473404d246de9b91a0116f38c5485f to restore the correct behavior:
> 
> Author: Dmitry Gutov<[email-masked]>
> Date:   Sat Jan 30 06:55:32 2016 +0300
> 
>      Don't pass DIR to 'hg status'
>     
>      * lisp/vc/vc-hg.el (vc-hg-dir-status-files):
>      Don't pass DIR to 'hg status' (bug#22481).

Good catch, thank you. Could you try this patch?

diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el
index c9a2cb412e..a91e1f5ad6 100644
--- a/lisp/vc/vc-hg.el
+++ b/lisp/vc/vc-hg.el
@@ -1352,14 +1352,14 @@ vc-hg-after-dir-status
  ;; Follows vc-exec-after.
  (declare-function vc-set-async-update "vc-dispatcher" (process-buffer))

-(defun vc-hg-dir-status-files (_dir files update-function)
+(defun vc-hg-dir-status-files (dir files update-function)
    ;; XXX: We can't pass DIR directly to 'hg status' because that
    ;; returns all ignored files if FILES is non-nil (bug#22481).
-  ;; If honoring DIR ever becomes important, try using '-I DIR/'.
-  (vc-hg-command (current-buffer) 'async files
-                 "status"
-                 (concat "-mardu" (if files "i"))
-                 "-C")
+  (let ((default-directory dir))
+    (vc-hg-command (current-buffer) 'async files
+                   "status" "re:" "-I" "."
+                   (concat "-mardu" (if files "i"))
+                   "-C"))
    (vc-run-delayed
      (vc-hg-after-dir-status update-function)))