Performance improvements for vc-hg
commitde76a167dc09dc695a5acebabb7ab354a6bf556e
authorDaniel Colascione <dancol@dancol.org>
Mon, 8 Feb 2016 18:52:54 +0000 (8 10:52 -0800)
committerDaniel Colascione <dancol@dancol.org>
Mon, 8 Feb 2016 18:52:54 +0000 (8 10:52 -0800)
tree7a01b94d12d60528904924f64aeaaff47a42be9d
parent4c629d8a8d640354690ce207dff09c7fda070d2a
Performance improvements for vc-hg

Teach vc-hg how to read some Mercurial internal data structures,
allowing us to avoid the need to run hg status -A, which is very slow
for large repositories.  Fall back to running hg if anything looks
funny.  vc-hg now puts the _working directory_ revision in the
modeline instead of the file revision, which greatly improves
performance and which allows us to again skip running hg in the case
that we have an active bookmark.

* lisp/vc/vc-hg.el (vc-hg-state): Try calling `vc-hg-statefast'
(vc-hg-symbolic-revision-styles)
(vc-hg-use-file-version-for-mode-line-version)
(vc-hg-parse-hg-data-structures): New user preferences
(vc-hg--active-bookmark-internal, vc-hg--run-log)
(vc-hg--symbolic-revision, vc-hg-mode-line-string)
(vc-hg--read-u8, vc-hg--read-u32-be)
(vc-hg--raw-dirstate-search, vc-hg--cached-dirstate-search)
(vc-hg--parts-to-string, vc-hg--pcre-to-elisp-re)
(vc-hg--glob-to-pcre, vc-hg--hgignore-add-pcre)
(vc-hg--hgignore-add-glob, vc-hg--hgignore-add-path)
(vc-hg--slurp-hgignore-1, vc-hg--slurp-hgignore)
(vc-hg--ignore-patterns-valid-p)
(vc-hg--ignore-patterns-ignored-p, vc-hg--time-to-fixnum)
(vc-hg--file-ignored-p, vc-hg--read-repo-requirements)
(vc-hg--requirements-understood-p, vc-hg--dirstate-scan-cache)
(vc-hg-state-fast): New functions.
(vc-hg--hgignore-patterns, vc-hg--hgignore-filenames)
(vc-hg--cached-ignore-patterns, vc-hg--dirstate-scan-cache)
(vc-hg--dirstate-scan-cache): New internal variables.
* lisp/vc/vc-hooks.el (vc-refresh-state): Invoke vc find-file-hook
before updating modeline.
lisp/vc/vc-hg.el
lisp/vc/vc-hooks.el