GNU bug report logs -
#24126
vc-hg-state can be extremely slow
Previous Next
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Emacs uses `hg status -A` in vc-hg-state, which in turn is used in many vc
commands (e.g. vc-root-diff). The "-A" option makes mercurial look at all
files under the directory, even the ignored ones. If there are a lot of
ignored files, this will be very slow.
As an example, I have a repo that's 38MB / 300 files when freshly checked
out, and 34GB / 1.2M files when the build finishes (if you're curious, it's
a yocto project). Without clearing the disk cache, `hg stat -A >
/dev/null` takes 28s; it's far longer if the disk cache isn't warmed up or
the output is actually used. `hg status` takes about 90ms.
vg-git-state does not have this problem; currently it behaves like `hg
status`, i.e. honoring the ignore rules. There is actually a FIXME
comment regarding this functionality, noting that `git ls-files -i -o
--exclude-standard` is the equivalent to `hg status -A`; this takes over
400s (I got sick of waiting).
I'm guessing VC has some sort of assumption that vc-x-state will return all
files. Maybe the command could bailout after taking too long and use `hg
status`. Maybe the command options could be configurable. Personally, I'd
prefer just dropping the "-A", because I've never used it and I don't
really see why you'd want to get ignored files by default; this is my
current solution.
I'm using Emacs 24.5.1. I've tested Emacs 25.1.1 and it still has the
issue; though vc-hg-state has changed, it still uses "-A" and is still very
slow on my repo.
--
Thanks,
Jonathan Kotta
Hofstadter's Law:
It always takes longer than you expect, even
when you take into account Hofstadter's Law.
[Message part 2 (text/html, inline)]
This bug report was last modified 99 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.