##// END OF EJS Templates
grep: change default to printing first matching rev....
Bryan O'Sullivan -
r1145:bd917e1a default
parent child Browse files
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 incrementing or fstate[fn]:
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