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.
This commit is contained in:
parent
f33b301c29
commit
d4ff1d7420
1 changed files with 18 additions and 7 deletions
|
@ -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)))
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue