Show More
@@ -873,16 +873,20 b' def grep(ui, repo, pattern, *pats, **opt' | |||||
873 | def display(fn, rev, states, prevstates): |
|
873 | def display(fn, rev, states, prevstates): | |
874 | diff = list(sets.Set(states).symmetric_difference(sets.Set(prevstates))) |
|
874 | diff = list(sets.Set(states).symmetric_difference(sets.Set(prevstates))) | |
875 | diff.sort(lambda x, y: cmp(x.linenum, y.linenum)) |
|
875 | diff.sort(lambda x, y: cmp(x.linenum, y.linenum)) | |
|
876 | counts = {'-': 0, '+': 0} | |||
876 | for l in diff: |
|
877 | for l in diff: | |
877 | if incrementing: |
|
878 | if incrementing or not opts['every_match']: | |
878 | change = ((l in prevstates) and '-') or '+' |
|
879 | change = ((l in prevstates) and '-') or '+' | |
879 | r = rev |
|
880 | r = rev | |
880 | else: |
|
881 | else: | |
881 | change = ((l in states) and '-') or '+' |
|
882 | change = ((l in states) and '-') or '+' | |
882 | r = prev[fn] |
|
883 | r = prev[fn] | |
883 | ui.write('%s:%s:%s:%s%s\n' % (fn, r, l.linenum, change, l.line)) |
|
884 | ui.write('%s:%s:%s:%s%s\n' % (fn, r, l.linenum, change, l.line)) | |
|
885 | counts[change] += 1 | |||
|
886 | return counts['+'], counts['-'] | |||
884 |
|
887 | |||
885 | fstate = {} |
|
888 | fstate = {} | |
|
889 | skip = {} | |||
886 | for st, rev, fns in walkchangerevs(ui, repo, repo.getcwd(), pats, opts): |
|
890 | for st, rev, fns in walkchangerevs(ui, repo, repo.getcwd(), pats, opts): | |
887 | if st == 'window': |
|
891 | if st == 'window': | |
888 | incrementing = rev |
|
892 | incrementing = rev | |
@@ -892,6 +896,7 b' def grep(ui, repo, pattern, *pats, **opt' | |||||
892 | mf = repo.manifest.read(change[0]) |
|
896 | mf = repo.manifest.read(change[0]) | |
893 | matches[rev] = {} |
|
897 | matches[rev] = {} | |
894 | for fn in fns: |
|
898 | for fn in fns: | |
|
899 | if fn in skip: continue | |||
895 | fstate.setdefault(fn, {}) |
|
900 | fstate.setdefault(fn, {}) | |
896 | try: |
|
901 | try: | |
897 | grepbody(fn, rev, getfile(fn).read(mf[fn])) |
|
902 | grepbody(fn, rev, getfile(fn).read(mf[fn])) | |
@@ -901,8 +906,11 b' def grep(ui, repo, pattern, *pats, **opt' | |||||
901 | states = matches[rev].items() |
|
906 | states = matches[rev].items() | |
902 | states.sort() |
|
907 | states.sort() | |
903 | for fn, m in states: |
|
908 | for fn, m in states: | |
904 |
if |
|
909 | if fn in skip: continue | |
905 | display(fn, rev, m, fstate[fn]) |
|
910 | if incrementing or not opts['every_match'] or fstate[fn]: | |
|
911 | pos, neg = display(fn, rev, m, fstate[fn]) | |||
|
912 | if pos and not opts['every_match']: | |||
|
913 | skip[fn] = True | |||
906 | fstate[fn] = m |
|
914 | fstate[fn] = m | |
907 | prev[fn] = rev |
|
915 | prev[fn] = rev | |
908 |
|
916 | |||
@@ -910,6 +918,7 b' def grep(ui, repo, pattern, *pats, **opt' | |||||
910 | fstate = fstate.items() |
|
918 | fstate = fstate.items() | |
911 | fstate.sort() |
|
919 | fstate.sort() | |
912 | for fn, state in fstate: |
|
920 | for fn, state in fstate: | |
|
921 | if fn in skip: continue | |||
913 | display(fn, rev, {}, state) |
|
922 | display(fn, rev, {}, state) | |
914 |
|
923 | |||
915 | def heads(ui, repo, **opts): |
|
924 | def heads(ui, repo, **opts): | |
@@ -1565,6 +1574,7 b' table = {' | |||||
1565 | [('0', 'print0', None, 'end filenames with NUL'), |
|
1574 | [('0', 'print0', None, 'end filenames with NUL'), | |
1566 | ('I', 'include', [], 'include path in search'), |
|
1575 | ('I', 'include', [], 'include path in search'), | |
1567 | ('X', 'exclude', [], 'include path in search'), |
|
1576 | ('X', 'exclude', [], 'include path in search'), | |
|
1577 | ('e', 'every-match', None, 'print every match in file history'), | |||
1568 | ('i', 'ignore-case', None, 'ignore case when matching'), |
|
1578 | ('i', 'ignore-case', None, 'ignore case when matching'), | |
1569 | ('l', 'files-with-matches', None, 'print names of files with matches'), |
|
1579 | ('l', 'files-with-matches', None, 'print names of files with matches'), | |
1570 | ('n', 'line-number', '', 'print line numbers'), |
|
1580 | ('n', 'line-number', '', 'print line numbers'), |
General Comments 0
You need to be logged in to leave comments.
Login now