Show More
@@ -3403,8 +3403,6 b' def grep(ui, repo, pattern, *pats, **opt' | |||||
3403 | ) |
|
3403 | ) | |
3404 |
|
3404 | |||
3405 | getfile = searcher._getfile |
|
3405 | getfile = searcher._getfile | |
3406 | matches = searcher._matches |
|
|||
3407 | copies = searcher._copies |
|
|||
3408 |
|
3406 | |||
3409 | uipathfn = scmutil.getuipathfn(repo) |
|
3407 | uipathfn = scmutil.getuipathfn(repo) | |
3410 |
|
3408 | |||
@@ -3514,8 +3512,6 b' def grep(ui, repo, pattern, *pats, **opt' | |||||
3514 | fm.data(matched=False) |
|
3512 | fm.data(matched=False) | |
3515 | fm.end() |
|
3513 | fm.end() | |
3516 |
|
3514 | |||
3517 | skip = searcher._skip |
|
|||
3518 | revfiles = searcher._revfiles |
|
|||
3519 | found = False |
|
3515 | found = False | |
3520 |
|
3516 | |||
3521 | wopts = logcmdutil.walkopts( |
|
3517 | wopts = logcmdutil.walkopts( | |
@@ -3532,29 +3528,11 b' def grep(ui, repo, pattern, *pats, **opt' | |||||
3532 |
|
3528 | |||
3533 | ui.pager(b'grep') |
|
3529 | ui.pager(b'grep') | |
3534 | fm = ui.formatter(b'grep', opts) |
|
3530 | fm = ui.formatter(b'grep', opts) | |
3535 | for ctx in scmutil.walkchangerevs( |
|
3531 | for fn, ctx, pstates, states in searcher.searchfiles(revs, makefilematcher): | |
3536 | repo, revs, makefilematcher, searcher._prep |
|
3532 | r = display(fm, fn, ctx, pstates, states) | |
3537 | ): |
|
3533 | found = found or r | |
3538 | rev = ctx.rev() |
|
3534 | if r and not diff and not all_files: | |
3539 | parent = ctx.p1().rev() |
|
3535 | searcher.skipfile(fn, ctx.rev()) | |
3540 | for fn in sorted(revfiles.get(rev, [])): |
|
|||
3541 | states = matches[rev][fn] |
|
|||
3542 | copy = copies.get(rev, {}).get(fn) |
|
|||
3543 | if fn in skip: |
|
|||
3544 | if copy: |
|
|||
3545 | skip.add(copy) |
|
|||
3546 | continue |
|
|||
3547 | pstates = matches.get(parent, {}).get(copy or fn, []) |
|
|||
3548 | if pstates or states: |
|
|||
3549 | r = display(fm, fn, ctx, pstates, states) |
|
|||
3550 | found = found or r |
|
|||
3551 | if r and not diff and not all_files: |
|
|||
3552 | searcher.skipfile(fn, rev) |
|
|||
3553 | del revfiles[rev] |
|
|||
3554 | # We will keep the matches dict for the duration of the window |
|
|||
3555 | # clear the matches dict once the window is over |
|
|||
3556 | if not revfiles: |
|
|||
3557 | matches.clear() |
|
|||
3558 | fm.end() |
|
3536 | fm.end() | |
3559 |
|
3537 | |||
3560 | return not found |
|
3538 | return not found |
@@ -115,6 +115,34 b' class grepsearcher(object):' | |||||
115 | if copy: |
|
115 | if copy: | |
116 | self._skip.add(copy) |
|
116 | self._skip.add(copy) | |
117 |
|
117 | |||
|
118 | def searchfiles(self, revs, makefilematcher): | |||
|
119 | """Walk files and revisions to yield (fn, ctx, pstates, states) | |||
|
120 | matches | |||
|
121 | ||||
|
122 | states is a list of linestate objects. pstates may be empty unless | |||
|
123 | diff is True. | |||
|
124 | """ | |||
|
125 | for ctx in scmutil.walkchangerevs( | |||
|
126 | self._repo, revs, makefilematcher, self._prep | |||
|
127 | ): | |||
|
128 | rev = ctx.rev() | |||
|
129 | parent = ctx.p1().rev() | |||
|
130 | for fn in sorted(self._revfiles.get(rev, [])): | |||
|
131 | states = self._matches[rev][fn] | |||
|
132 | copy = self._copies.get(rev, {}).get(fn) | |||
|
133 | if fn in self._skip: | |||
|
134 | if copy: | |||
|
135 | self._skip.add(copy) | |||
|
136 | continue | |||
|
137 | pstates = self._matches.get(parent, {}).get(copy or fn, []) | |||
|
138 | if pstates or states: | |||
|
139 | yield fn, ctx, pstates, states | |||
|
140 | del self._revfiles[rev] | |||
|
141 | # We will keep the matches dict for the duration of the window | |||
|
142 | # clear the matches dict once the window is over | |||
|
143 | if not self._revfiles: | |||
|
144 | self._matches.clear() | |||
|
145 | ||||
118 | def _grepbody(self, fn, rev, body): |
|
146 | def _grepbody(self, fn, rev, body): | |
119 | self._matches[rev].setdefault(fn, []) |
|
147 | self._matches[rev].setdefault(fn, []) | |
120 | m = self._matches[rev][fn] |
|
148 | m = self._matches[rev][fn] |
General Comments 0
You need to be logged in to leave comments.
Login now