From 591dd8d7d5e23fd03696f9a536d7f40e77ea2de4 Mon Sep 17 00:00:00 2001 From: Spencer Baugh Date: Thu, 7 Nov 2024 12:28:49 -0500 Subject: [PATCH] Speed up vc-hg-state by treating ignored files as unregistered The most significant slow component of "hg status" is parsing the .hgignore file. If we pass -mardc instead of -A to hg status, hg doesn't list ignored or untracked files, so it skips parsing the .hgignore. On my large repo, this brings "hg status" from 140ms to 20ms. For vc-hg-state, the distinction doesn't matter: nothing using the output of vc-hg-state has significantly different behavior for ignored files vs unregistered files: - vc-dir-clean-files and vc-dir-recompute-file-state call vc-hg-state, but will never see an ignored file anyway since vc-dir shouldn't list ignored files for hg. - vc-next-action checks 'ignored, but it's OK to take the 'unregistered path instead; it will either fail when calling hg, or succeed. - Other users of vc-state don't differ between 'ignored and 'unregistered * lisp/vc/vc-hg.el (vc-hg-state-slow): Treat ignored files as unregistered. --- lisp/vc/vc-hg.el | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el index 856bea66a6f..2dbd1285318 100644 --- a/lisp/vc/vc-hg.el +++ b/lisp/vc/vc-hg.el @@ -245,7 +245,7 @@ vc-hg-state-slow "--config" "ui.report_untrusted=0" "--config" "alias.status=status" "--config" "defaults.status=" - "status" "-A" (file-relative-name file))) + "status" "-mardc" (file-relative-name file))) ;; Some problem happened. E.g. We can't find an `hg' ;; executable. (error nil))))))) @@ -260,12 +260,12 @@ vc-hg-state-slow ((eq state ?=) 'up-to-date) ((eq state ?A) 'added) ((eq state ?M) 'edited) - ((eq state ?I) 'ignored) ((eq state ?R) 'removed) ((eq state ?!) 'missing) - ((eq state ??) 'unregistered) ((eq state ?C) 'up-to-date) ;; Older mercurial versions use this. - (t 'up-to-date)))))) + ;; Ignored or untracked files don't show up; they're both + ;; treated as unregistered. + (t 'unregistered)))))) (defun vc-hg-working-revision (_file) "Hg-specific version of `vc-working-revision'." -- 2.39.3