comparison mercurial/hgweb/webutil.py @ 37989:53b0a51aed72

hgweb: move getblock() closure out of compare() (Please use 'hg diff -w' to get readable diff from this patch.)
author Yuya Nishihara <yuya@tcha.org>
date Tue, 03 Apr 2018 23:57:00 +0900
parents 406f945c5814
children c0ccbf4fbe47
comparison
equal deleted inserted replaced
37988:406f945c5814 37989:53b0a51aed72
589 'rightlineno': rightlineno, 589 'rightlineno': rightlineno,
590 'rightlinenumber': "% 6s" % rlno, 590 'rightlinenumber': "% 6s" % rlno,
591 'rightline': rightline or '', 591 'rightline': rightline or '',
592 }) 592 })
593 593
594 def _getcompblock(tmpl, leftlines, rightlines, opcodes):
595 for type, llo, lhi, rlo, rhi in opcodes:
596 len1 = lhi - llo
597 len2 = rhi - rlo
598 count = min(len1, len2)
599 for i in xrange(count):
600 yield _compline(tmpl,
601 type=type,
602 leftlineno=llo + i + 1,
603 leftline=leftlines[llo + i],
604 rightlineno=rlo + i + 1,
605 rightline=rightlines[rlo + i])
606 if len1 > len2:
607 for i in xrange(llo + count, lhi):
608 yield _compline(tmpl,
609 type=type,
610 leftlineno=i + 1,
611 leftline=leftlines[i],
612 rightlineno=None,
613 rightline=None)
614 elif len2 > len1:
615 for i in xrange(rlo + count, rhi):
616 yield _compline(tmpl,
617 type=type,
618 leftlineno=None,
619 leftline=None,
620 rightlineno=i + 1,
621 rightline=rightlines[i])
622
594 def compare(tmpl, context, leftlines, rightlines): 623 def compare(tmpl, context, leftlines, rightlines):
595 '''Generator function that provides side-by-side comparison data.''' 624 '''Generator function that provides side-by-side comparison data.'''
596
597 def getblock(opcodes):
598 for type, llo, lhi, rlo, rhi in opcodes:
599 len1 = lhi - llo
600 len2 = rhi - rlo
601 count = min(len1, len2)
602 for i in xrange(count):
603 yield _compline(tmpl,
604 type=type,
605 leftlineno=llo + i + 1,
606 leftline=leftlines[llo + i],
607 rightlineno=rlo + i + 1,
608 rightline=rightlines[rlo + i])
609 if len1 > len2:
610 for i in xrange(llo + count, lhi):
611 yield _compline(tmpl,
612 type=type,
613 leftlineno=i + 1,
614 leftline=leftlines[i],
615 rightlineno=None,
616 rightline=None)
617 elif len2 > len1:
618 for i in xrange(rlo + count, rhi):
619 yield _compline(tmpl,
620 type=type,
621 leftlineno=None,
622 leftline=None,
623 rightlineno=i + 1,
624 rightline=rightlines[i])
625
626 s = difflib.SequenceMatcher(None, leftlines, rightlines) 625 s = difflib.SequenceMatcher(None, leftlines, rightlines)
627 if context < 0: 626 if context < 0:
628 yield tmpl.generate('comparisonblock', 627 l = _getcompblock(tmpl, leftlines, rightlines, s.get_opcodes())
629 {'lines': getblock(s.get_opcodes())}) 628 yield tmpl.generate('comparisonblock', {'lines': l})
630 else: 629 else:
631 for oc in s.get_grouped_opcodes(n=context): 630 for oc in s.get_grouped_opcodes(n=context):
632 yield tmpl.generate('comparisonblock', {'lines': getblock(oc)}) 631 l = _getcompblock(tmpl, leftlines, rightlines, oc)
632 yield tmpl.generate('comparisonblock', {'lines': l})
633 633
634 def diffstatgen(ctx, basectx): 634 def diffstatgen(ctx, basectx):
635 '''Generator function that provides the diffstat data.''' 635 '''Generator function that provides the diffstat data.'''
636 636
637 stats = patch.diffstatdata( 637 stats = patch.diffstatdata(