Mercurial > hg
diff mercurial/hgweb/webutil.py @ 37990:c0ccbf4fbe47
hgweb: convert comparison {lines} to a mappinggenerator with named template
Bare generator can't be restarted.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Wed, 04 Apr 2018 00:08:10 +0900 |
parents | 53b0a51aed72 |
children | 4e407c7b1fbd |
line wrap: on
line diff
--- a/mercurial/hgweb/webutil.py Tue Apr 03 23:57:00 2018 +0900 +++ b/mercurial/hgweb/webutil.py Wed Apr 04 00:08:10 2018 +0900 @@ -575,12 +575,12 @@ linerange, lineidprefix) return templateutil.mappinggenerator(_diffsgen, args=args, name='diffblock') -def _compline(tmpl, type, leftlineno, leftline, rightlineno, rightline): +def _compline(type, leftlineno, leftline, rightlineno, rightline): lineid = leftlineno and ("l%d" % leftlineno) or '' lineid += rightlineno and ("r%d" % rightlineno) or '' llno = '%d' % leftlineno if leftlineno else '' rlno = '%d' % rightlineno if rightlineno else '' - return tmpl.generate('comparisonline', { + return { 'type': type, 'lineid': lineid, 'leftlineno': leftlineno, @@ -589,46 +589,48 @@ 'rightlineno': rightlineno, 'rightlinenumber': "% 6s" % rlno, 'rightline': rightline or '', - }) + } -def _getcompblock(tmpl, leftlines, rightlines, opcodes): +def _getcompblockgen(context, leftlines, rightlines, opcodes): for type, llo, lhi, rlo, rhi in opcodes: len1 = lhi - llo len2 = rhi - rlo count = min(len1, len2) for i in xrange(count): - yield _compline(tmpl, - type=type, + yield _compline(type=type, leftlineno=llo + i + 1, leftline=leftlines[llo + i], rightlineno=rlo + i + 1, rightline=rightlines[rlo + i]) if len1 > len2: for i in xrange(llo + count, lhi): - yield _compline(tmpl, - type=type, + yield _compline(type=type, leftlineno=i + 1, leftline=leftlines[i], rightlineno=None, rightline=None) elif len2 > len1: for i in xrange(rlo + count, rhi): - yield _compline(tmpl, - type=type, + yield _compline(type=type, leftlineno=None, leftline=None, rightlineno=i + 1, rightline=rightlines[i]) +def _getcompblock(leftlines, rightlines, opcodes): + args = (leftlines, rightlines, opcodes) + return templateutil.mappinggenerator(_getcompblockgen, args=args, + name='comparisonline') + def compare(tmpl, context, leftlines, rightlines): '''Generator function that provides side-by-side comparison data.''' s = difflib.SequenceMatcher(None, leftlines, rightlines) if context < 0: - l = _getcompblock(tmpl, leftlines, rightlines, s.get_opcodes()) + l = _getcompblock(leftlines, rightlines, s.get_opcodes()) yield tmpl.generate('comparisonblock', {'lines': l}) else: for oc in s.get_grouped_opcodes(n=context): - l = _getcompblock(tmpl, leftlines, rightlines, oc) + l = _getcompblock(leftlines, rightlines, oc) yield tmpl.generate('comparisonblock', {'lines': l}) def diffstatgen(ctx, basectx):