emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master d4ff1d74209: Use faster option for running vc-hg status (Bug#6347


From: Dmitry Gutov
Subject: master d4ff1d74209: Use faster option for running vc-hg status (Bug#63470)
Date: Mon, 22 May 2023 18:31:48 -0400 (EDT)

branch: master
commit d4ff1d74209e97730c52ddd50c4d643c79087a33
Author: Spencer Baugh <sbaugh@janestreet.com>
Commit: Dmitry Gutov <dmitry@gutov.dev>

    Use faster option for running vc-hg status (Bug#63470)
    
    In modern Mercurial, removing the "re:" "-I" "." options provides a
    10x-20x speedup because it allows the Rust implementation of "hg
    status" to be used.
    
    * lisp/vc/vc-hg.el (vc-hg--program-version): Add.
    (vc-hg-dir-status-files): Use --config commands.status.relative=1 to
    make paths relative when available.
---
 lisp/vc/vc-hg.el | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)

diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el
index 78480fd8062..182d76882bb 100644
--- a/lisp/vc/vc-hg.el
+++ b/lisp/vc/vc-hg.el
@@ -1372,17 +1372,28 @@ REV is the revision to check out into WORKFILE."
 ;; Follows vc-exec-after.
 (declare-function vc-set-async-update "vc-dispatcher" (process-buffer))
 
+(defvar vc-hg--program-version nil)
+
+(defun vc-hg--program-version ()
+  (or vc-hg--program-version
+      (setq vc-hg--program-version
+            (with-temp-buffer
+              (condition-case _ (vc-hg-command t 0 nil "version")
+                (error "0")
+                (:success
+                 (goto-char (point-min))
+                 (re-search-forward "Mercurial Distributed SCM (version 
\\([0-9][0-9.]+\\)")
+                 (string-trim-right (match-string 1) "\\.")))))))
+
 (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).
   (let ((default-directory dir))
-    ;; TODO: Use "--config 'status.relative=1'" instead of "re:"
-    ;; when we're allowed to depend on Mercurial 4.2+
-    ;; (it's a bit faster).
-    (vc-hg-command (current-buffer) 'async files
-                   "status" "re:" "-I" "."
-                   (concat "-mardu" (if files "i"))
-                   "-C"))
+    (apply #'vc-hg-command (current-buffer) 'async files
+           "status" (concat "-mardu" (if files "i")) "-C"
+           (if (version<= "4.2" (vc-hg--program-version))
+               '("--config" "commands.status.relative=1")
+             '("re:" "-I" "."))))
   (vc-run-delayed
     (vc-hg-after-dir-status update-function)))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]