Mercurial > hg
comparison mercurial/util.py @ 1031:503aaf19a040
Rewrite log command. New version is faster and more featureful.
The original implementation of log walked backwards through history,
which had terrible behaviour. It took several minutes to view
complete kernel change history on a fast machine, for example.
The rewrite uses a windowed approach to walk hunks of history
forwards, while still giving results in reverse order. This reduces
run time from five minutes to five seconds on my system.
In addition, the rewrite uses our normal name handling mechanisms, so
you can run a command like "hg log net/ipv4/**.c" and get a useful
answer. It optimises for three different cases (no arguments, only
files, and anything goes), so it performs well in all circumstances
I've tested.
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Wed, 24 Aug 2005 12:39:10 -0700 |
parents | 22571b8d35d3 |
children | 6d5a62a549fa |
comparison
equal
deleted
inserted
replaced
1030:28e2f13ca7c4 | 1031:503aaf19a040 |
---|---|
154 incmatch = matchfn(map(patkind, inc), '(?:/|$)') | 154 incmatch = matchfn(map(patkind, inc), '(?:/|$)') |
155 excmatch = lambda fn: False | 155 excmatch = lambda fn: False |
156 if exc: | 156 if exc: |
157 excmatch = matchfn(map(patkind, exc), '(?:/|$)') | 157 excmatch = matchfn(map(patkind, exc), '(?:/|$)') |
158 | 158 |
159 return roots, lambda fn: (incmatch(fn) and not excmatch(fn) and | 159 return (roots, |
160 (fn.endswith('/') or | 160 lambda fn: (incmatch(fn) and not excmatch(fn) and |
161 (not pats and not files) or | 161 (fn.endswith('/') or |
162 (pats and patmatch(fn)) or | 162 (not pats and not files) or |
163 (files and filematch(fn)))) | 163 (pats and patmatch(fn)) or |
164 (files and filematch(fn)))), | |
165 (inc or exc or (pats and pats != [('glob', '**')])) and True) | |
164 | 166 |
165 def system(cmd, errprefix=None): | 167 def system(cmd, errprefix=None): |
166 """execute a shell command that must succeed""" | 168 """execute a shell command that must succeed""" |
167 rc = os.system(cmd) | 169 rc = os.system(cmd) |
168 if rc: | 170 if rc: |