##// END OF EJS Templates
logcmdutil: hold makefilematcher/makehunksfilter() by changesetpriner (API)...
Yuya Nishihara -
r36020:fcde8946 default
parent child Browse files
Show More
@@ -3450,7 +3450,10 b' def log(ui, repo, *pats, **opts):'
3450 getrenamed = templatekw.getrenamedfn(repo, endrev=endrev)
3450 getrenamed = templatekw.getrenamedfn(repo, endrev=endrev)
3451
3451
3452 ui.pager('log')
3452 ui.pager('log')
3453 displayer = logcmdutil.changesetdisplayer(ui, repo, opts, buffered=True)
3453 displayer = logcmdutil.changesetdisplayer(ui, repo, opts,
3454 makefilematcher=filematcher,
3455 makehunksfilter=hunksfilter,
3456 buffered=True)
3454 for rev in revs:
3457 for rev in revs:
3455 ctx = repo[rev]
3458 ctx = repo[rev]
3456 copies = None
3459 copies = None
@@ -3460,16 +3463,7 b' def log(ui, repo, *pats, **opts):'
3460 rename = getrenamed(fn, rev)
3463 rename = getrenamed(fn, rev)
3461 if rename:
3464 if rename:
3462 copies.append((fn, rename[0]))
3465 copies.append((fn, rename[0]))
3463 if filematcher:
3466 displayer.show(ctx, copies=copies)
3464 revmatchfn = filematcher(ctx)
3465 else:
3466 revmatchfn = None
3467 if hunksfilter:
3468 revhunksfilter = hunksfilter(ctx)
3469 else:
3470 revhunksfilter = None
3471 displayer.show(ctx, copies=copies, matchfn=revmatchfn,
3472 hunksfilterfn=revhunksfilter)
3473 displayer.flush(ctx)
3467 displayer.flush(ctx)
3474
3468
3475 displayer.close()
3469 displayer.close()
@@ -886,7 +886,8 b' def _incoming(displaychlist, subreporecu'
886 ui.status(_("no changes found\n"))
886 ui.status(_("no changes found\n"))
887 return subreporecurse()
887 return subreporecurse()
888 ui.pager('incoming')
888 ui.pager('incoming')
889 displayer = logcmdutil.changesetdisplayer(ui, other, opts, buffered)
889 displayer = logcmdutil.changesetdisplayer(ui, other, opts,
890 buffered=buffered)
890 displaychlist(other, chlist, displayer)
891 displaychlist(other, chlist, displayer)
891 displayer.close()
892 displayer.close()
892 finally:
893 finally:
@@ -135,11 +135,13 b' def changesetlabels(ctx):'
135 class changesetprinter(object):
135 class changesetprinter(object):
136 '''show changeset information when templating not requested.'''
136 '''show changeset information when templating not requested.'''
137
137
138 def __init__(self, ui, repo, matchfn=None, diffopts=None, buffered=False):
138 def __init__(self, ui, repo, makefilematcher=None, makehunksfilter=None,
139 diffopts=None, buffered=False):
139 self.ui = ui
140 self.ui = ui
140 self.repo = repo
141 self.repo = repo
141 self.buffered = buffered
142 self.buffered = buffered
142 self.matchfn = matchfn
143 self._makefilematcher = makefilematcher or (lambda ctx: None)
144 self._makehunksfilter = makehunksfilter or (lambda ctx: None)
143 self.diffopts = diffopts or {}
145 self.diffopts = diffopts or {}
144 self.header = {}
146 self.header = {}
145 self.hunk = {}
147 self.hunk = {}
@@ -163,17 +165,16 b' class changesetprinter(object):'
163 if self.footer:
165 if self.footer:
164 self.ui.write(self.footer)
166 self.ui.write(self.footer)
165
167
166 def show(self, ctx, copies=None, matchfn=None, hunksfilterfn=None,
168 def show(self, ctx, copies=None, **props):
167 **props):
168 props = pycompat.byteskwargs(props)
169 props = pycompat.byteskwargs(props)
169 if self.buffered:
170 if self.buffered:
170 self.ui.pushbuffer(labeled=True)
171 self.ui.pushbuffer(labeled=True)
171 self._show(ctx, copies, matchfn, hunksfilterfn, props)
172 self._show(ctx, copies, props)
172 self.hunk[ctx.rev()] = self.ui.popbuffer()
173 self.hunk[ctx.rev()] = self.ui.popbuffer()
173 else:
174 else:
174 self._show(ctx, copies, matchfn, hunksfilterfn, props)
175 self._show(ctx, copies, props)
175
176
176 def _show(self, ctx, copies, matchfn, hunksfilterfn, props):
177 def _show(self, ctx, copies, props):
177 '''show a single changeset or file revision'''
178 '''show a single changeset or file revision'''
178 changenode = ctx.node()
179 changenode = ctx.node()
179 rev = ctx.rev()
180 rev = ctx.rev()
@@ -264,7 +265,7 b' class changesetprinter(object):'
264 label='log.summary')
265 label='log.summary')
265 self.ui.write("\n")
266 self.ui.write("\n")
266
267
267 self._showpatch(ctx, matchfn, hunksfilterfn=hunksfilterfn)
268 self._showpatch(ctx)
268
269
269 def _showobsfate(self, ctx):
270 def _showobsfate(self, ctx):
270 obsfate = templatekw.showobsfate(repo=self.repo, ctx=ctx, ui=self.ui)
271 obsfate = templatekw.showobsfate(repo=self.repo, ctx=ctx, ui=self.ui)
@@ -278,9 +279,9 b' class changesetprinter(object):'
278 '''empty method used by extension as a hook point
279 '''empty method used by extension as a hook point
279 '''
280 '''
280
281
281 def _showpatch(self, ctx, matchfn, hunksfilterfn=None):
282 def _showpatch(self, ctx):
282 if not matchfn:
283 matchfn = self._makefilematcher(ctx)
283 matchfn = self.matchfn
284 hunksfilterfn = self._makehunksfilter(ctx)
284 if matchfn:
285 if matchfn:
285 stat = self.diffopts.get('stat')
286 stat = self.diffopts.get('stat')
286 diff = self.diffopts.get('patch')
287 diff = self.diffopts.get('patch')
@@ -303,8 +304,10 b' class changesetprinter(object):'
303 class jsonchangeset(changesetprinter):
304 class jsonchangeset(changesetprinter):
304 '''format changeset information.'''
305 '''format changeset information.'''
305
306
306 def __init__(self, ui, repo, matchfn=None, diffopts=None, buffered=False):
307 def __init__(self, ui, repo, makefilematcher=None, makehunksfilter=None,
307 changesetprinter.__init__(self, ui, repo, matchfn, diffopts, buffered)
308 diffopts=None, buffered=False):
309 changesetprinter.__init__(self, ui, repo, makefilematcher,
310 makehunksfilter, diffopts, buffered)
308 self.cache = {}
311 self.cache = {}
309 self._first = True
312 self._first = True
310
313
@@ -314,7 +317,7 b' class jsonchangeset(changesetprinter):'
314 else:
317 else:
315 self.ui.write("[]\n")
318 self.ui.write("[]\n")
316
319
317 def _show(self, ctx, copies, matchfn, hunksfilterfn, props):
320 def _show(self, ctx, copies, props):
318 '''show a single changeset or file revision'''
321 '''show a single changeset or file revision'''
319 rev = ctx.rev()
322 rev = ctx.rev()
320 if rev is None:
323 if rev is None:
@@ -379,7 +382,7 b' class jsonchangeset(changesetprinter):'
379 ", ".join('"%s": "%s"' % (j(k), j(v))
382 ", ".join('"%s": "%s"' % (j(k), j(v))
380 for k, v in copies))
383 for k, v in copies))
381
384
382 matchfn = self.matchfn
385 matchfn = self._makefilematcher(ctx)
383 if matchfn:
386 if matchfn:
384 stat = self.diffopts.get('stat')
387 stat = self.diffopts.get('stat')
385 diff = self.diffopts.get('patch')
388 diff = self.diffopts.get('patch')
@@ -410,9 +413,10 b' class changesettemplater(changesetprinte'
410
413
411 # Arguments before "buffered" used to be positional. Consider not
414 # Arguments before "buffered" used to be positional. Consider not
412 # adding/removing arguments before "buffered" to not break callers.
415 # adding/removing arguments before "buffered" to not break callers.
413 def __init__(self, ui, repo, tmplspec, matchfn=None, diffopts=None,
416 def __init__(self, ui, repo, tmplspec, makefilematcher=None,
414 buffered=False):
417 makehunksfilter=None, diffopts=None, buffered=False):
415 changesetprinter.__init__(self, ui, repo, matchfn, diffopts, buffered)
418 changesetprinter.__init__(self, ui, repo, makefilematcher,
419 makehunksfilter, diffopts, buffered)
416 tres = formatter.templateresources(ui, repo)
420 tres = formatter.templateresources(ui, repo)
417 self.t = formatter.loadtemplater(ui, tmplspec,
421 self.t = formatter.loadtemplater(ui, tmplspec,
418 defaults=templatekw.keywords,
422 defaults=templatekw.keywords,
@@ -455,7 +459,7 b' class changesettemplater(changesetprinte'
455 self.footer += templater.stringify(self.t(self._parts['docfooter']))
459 self.footer += templater.stringify(self.t(self._parts['docfooter']))
456 return super(changesettemplater, self).close()
460 return super(changesettemplater, self).close()
457
461
458 def _show(self, ctx, copies, matchfn, hunksfilterfn, props):
462 def _show(self, ctx, copies, props):
459 '''show a single changeset or file revision'''
463 '''show a single changeset or file revision'''
460 props = props.copy()
464 props = props.copy()
461 props['ctx'] = ctx
465 props['ctx'] = ctx
@@ -482,7 +486,7 b' class changesettemplater(changesetprinte'
482 # write changeset metadata, then patch if requested
486 # write changeset metadata, then patch if requested
483 key = self._parts[self._tref]
487 key = self._parts[self._tref]
484 self.ui.write(templater.stringify(self.t(key, **props)))
488 self.ui.write(templater.stringify(self.t(key, **props)))
485 self._showpatch(ctx, matchfn, hunksfilterfn=hunksfilterfn)
489 self._showpatch(ctx)
486
490
487 if self._parts['footer']:
491 if self._parts['footer']:
488 if not self.footer:
492 if not self.footer:
@@ -529,7 +533,8 b' def maketemplater(ui, repo, tmpl, buffer'
529 spec = templatespec(tmpl, None)
533 spec = templatespec(tmpl, None)
530 return changesettemplater(ui, repo, spec, buffered=buffered)
534 return changesettemplater(ui, repo, spec, buffered=buffered)
531
535
532 def changesetdisplayer(ui, repo, opts, buffered=False):
536 def changesetdisplayer(ui, repo, opts, makefilematcher=None,
537 makehunksfilter=None, buffered=False):
533 """show one changeset using template or regular display.
538 """show one changeset using template or regular display.
534
539
535 Display format will be the first non-empty hit of:
540 Display format will be the first non-empty hit of:
@@ -541,19 +546,20 b' def changesetdisplayer(ui, repo, opts, b'
541 regular display via changesetprinter() is done.
546 regular display via changesetprinter() is done.
542 """
547 """
543 # options
548 # options
544 match = None
549 if not makefilematcher and (opts.get('patch') or opts.get('stat')):
545 if opts.get('patch') or opts.get('stat'):
550 def makefilematcher(ctx):
546 match = scmutil.matchall(repo)
551 return scmutil.matchall(repo)
547
552
553 postargs = (makefilematcher, makehunksfilter, opts, buffered)
548 if opts.get('template') == 'json':
554 if opts.get('template') == 'json':
549 return jsonchangeset(ui, repo, match, opts, buffered)
555 return jsonchangeset(ui, repo, *postargs)
550
556
551 spec = _lookuptemplate(ui, opts.get('template'), opts.get('style'))
557 spec = _lookuptemplate(ui, opts.get('template'), opts.get('style'))
552
558
553 if not spec.ref and not spec.tmpl and not spec.mapfile:
559 if not spec.ref and not spec.tmpl and not spec.mapfile:
554 return changesetprinter(ui, repo, match, opts, buffered)
560 return changesetprinter(ui, repo, *postargs)
555
561
556 return changesettemplater(ui, repo, spec, match, opts, buffered)
562 return changesettemplater(ui, repo, spec, *postargs)
557
563
558 def _makematcher(repo, revs, pats, opts):
564 def _makematcher(repo, revs, pats, opts):
559 """Build matcher and expanded patterns from log options
565 """Build matcher and expanded patterns from log options
@@ -861,8 +867,7 b' def _graphnodeformatter(ui, displayer):'
861 return templ.render(props)
867 return templ.render(props)
862 return formatnode
868 return formatnode
863
869
864 def displaygraph(ui, repo, dag, displayer, edgefn, getrenamed=None,
870 def displaygraph(ui, repo, dag, displayer, edgefn, getrenamed=None, props=None):
865 filematcher=None, props=None):
866 props = props or {}
871 props = props or {}
867 formatnode = _graphnodeformatter(ui, displayer)
872 formatnode = _graphnodeformatter(ui, displayer)
868 state = graphmod.asciistate()
873 state = graphmod.asciistate()
@@ -897,13 +902,10 b' def displaygraph(ui, repo, dag, displaye'
897 rename = getrenamed(fn, ctx.rev())
902 rename = getrenamed(fn, ctx.rev())
898 if rename:
903 if rename:
899 copies.append((fn, rename[0]))
904 copies.append((fn, rename[0]))
900 revmatchfn = None
901 if filematcher is not None:
902 revmatchfn = filematcher(ctx)
903 edges = edgefn(type, char, state, rev, parents)
905 edges = edgefn(type, char, state, rev, parents)
904 firstedge = next(edges)
906 firstedge = next(edges)
905 width = firstedge[2]
907 width = firstedge[2]
906 displayer.show(ctx, copies=copies, matchfn=revmatchfn,
908 displayer.show(ctx, copies=copies,
907 _graphwidth=width, **pycompat.strkwargs(props))
909 _graphwidth=width, **pycompat.strkwargs(props))
908 lines = displayer.hunk.pop(rev).split('\n')
910 lines = displayer.hunk.pop(rev).split('\n')
909 if not lines[-1]:
911 if not lines[-1]:
@@ -926,9 +928,9 b' def graphlog(ui, repo, revs, filematcher'
926 getrenamed = templatekw.getrenamedfn(repo, endrev=endrev)
928 getrenamed = templatekw.getrenamedfn(repo, endrev=endrev)
927
929
928 ui.pager('log')
930 ui.pager('log')
929 displayer = changesetdisplayer(ui, repo, opts, buffered=True)
931 displayer = changesetdisplayer(ui, repo, opts, makefilematcher=filematcher,
930 displaygraph(ui, repo, revdag, displayer, graphmod.asciiedges, getrenamed,
932 buffered=True)
931 filematcher)
933 displaygraph(ui, repo, revdag, displayer, graphmod.asciiedges, getrenamed)
932
934
933 def checkunsupportedgraphflags(pats, opts):
935 def checkunsupportedgraphflags(pats, opts):
934 for op in ["newest_first"]:
936 for op in ["newest_first"]:
General Comments 0
You need to be logged in to leave comments. Login now