Mercurial > hg
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( |