Mercurial > hg
changeset 6146:e3dd35d3603b
Speed up hg grep by avoiding useless manifest parsing
In the kernel repo (tip = 2b89f7111b96), a "hg grep mpm MAINTAINERS" goes
from ~165s to 0.7s. This could get even a bit faster if we broke out of
the loop after the first match, but I'm not sure how that would interact
with the --follow code.
This is obviously an extreme example, but other cases should also benefit
from this patch.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Tue, 19 Feb 2008 19:20:10 -0300 |
parents | 154f8be6272b |
children | 53ae5af55db3 |
files | mercurial/commands.py |
diffstat | 1 files changed, 4 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/commands.py Tue Feb 19 19:20:10 2008 -0300 +++ b/mercurial/commands.py Tue Feb 19 19:20:10 2008 -0300 @@ -1072,19 +1072,19 @@ if st == 'window': matches.clear() elif st == 'add': - mf = repo.changectx(rev).manifest() + ctx = repo.changectx(rev) matches[rev] = {} for fn in fns: if fn in skip: continue try: - grepbody(fn, rev, getfile(fn).read(mf[fn])) + grepbody(fn, rev, getfile(fn).read(ctx.filenode(fn))) fstate.setdefault(fn, []) if follow: - copied = getfile(fn).renamed(mf[fn]) + copied = getfile(fn).renamed(ctx.filenode(fn)) if copied: copies.setdefault(rev, {})[fn] = copied[0] - except KeyError: + except revlog.LookupError: pass elif st == 'iter': states = matches[rev].items()