[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)))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master d4ff1d74209: Use faster option for running vc-hg status (Bug#63470),
Dmitry Gutov <=