# HG changeset patch # User Benoit Boissinot # Date 2006-12-22 21:51:39 # Node ID cb66641cdee39807de586a41ca20317bfc14d262 # Parent 3d3007064a171c53ec5a9160e2eaa84521c5e129 grep: remove count handling, simplify, fix issue337 diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -1149,13 +1149,14 @@ def grep(ui, repo, pattern, *pats, **opt prev = {} def display(fn, rev, states, prevstates): - counts = {'-': 0, '+': 0} + found = False filerevmatches = {} - if not opts['all']: - a, b, r = prevstates, states, rev + r = prev.get(fn, -1) + if opts['all']: + iter = difflinestates(states, prevstates) else: - a, b, r = states, prevstates, prev.get(fn, -1) - for change, l in difflinestates(a, b): + iter = [('', l) for l in prevstates] + for change, l in iter: cols = [fn, str(r)] if opts['line_number']: cols.append(str(l.linenum)) @@ -1171,14 +1172,14 @@ def grep(ui, repo, pattern, *pats, **opt else: cols.append(l.line) ui.write(sep.join(cols), eol) - counts[change] += 1 - return counts['+'], counts['-'] + found = True + return found fstate = {} skip = {} get = util.cachefunc(lambda r: repo.changectx(r).changeset()) changeiter, matchfn = cmdutil.walkchangerevs(ui, repo, pats, get, opts) - count = 0 + found = False follow = opts.get('follow') for st, rev, fns in changeiter: if st == 'window': @@ -1207,10 +1208,10 @@ def grep(ui, repo, pattern, *pats, **opt if copy: skip[copy] = True continue - if not opts['all'] or fstate[fn]: - pos, neg = display(fn, rev, m, fstate[fn]) - count += pos + neg - if pos and not opts['all']: + if fn in prev or fstate[fn]: + r = display(fn, rev, m, fstate[fn]) + found = found or r + if r and not opts['all']: skip[fn] = True if copy: skip[copy] = True @@ -1225,8 +1226,8 @@ def grep(ui, repo, pattern, *pats, **opt if fn in skip: continue if fn not in copies.get(prev[fn], {}): - display(fn, rev, {}, state) - return (count == 0 and 1) or 0 + found = display(fn, rev, {}, state) or found + return (not found and 1) or 0 def heads(ui, repo, **opts): """show current repository heads diff --git a/tests/test-grep b/tests/test-grep --- a/tests/test-grep +++ b/tests/test-grep @@ -31,3 +31,22 @@ hg grep -f 'import$' port2 echo deport >> port2 hg commit -m 5 -u eggs -d '6 0' hg grep -f --all -nu port port2 + +cd .. +hg init t2 +cd t2 +hg grep foobar foo +hg grep foobar +echo blue >> color +echo black >> color +hg add color +hg ci -m 0 -d '0 0' +echo orange >> color +hg ci -m 1 -d '0 0' +echo black > color +hg ci -m 2 -d '0 0' +echo orange >> color +echo blue >> color +hg ci -m 3 -d '0 0' +hg grep orange +hg grep --all orange diff --git a/tests/test-grep.out b/tests/test-grep.out --- a/tests/test-grep.out +++ b/tests/test-grep.out @@ -26,3 +26,7 @@ port:2:2:+:spam:vaportight port:2:3:+:spam:import/export port:1:2:+:eggs:export port:0:1:+:spam:import +color:3:orange +color:3:+:orange +color:2:-:orange +color:1:+:orange