mercurial/hgweb/webutil.py
changeset 37990 c0ccbf4fbe47
parent 37989 53b0a51aed72
child 37991 4e407c7b1fbd
equal deleted inserted replaced
37989:53b0a51aed72 37990:c0ccbf4fbe47
   573 def diffs(web, ctx, basectx, files, style, linerange=None, lineidprefix=''):
   573 def diffs(web, ctx, basectx, files, style, linerange=None, lineidprefix=''):
   574     args = (web.repo, ctx, basectx, files, style, web.stripecount,
   574     args = (web.repo, ctx, basectx, files, style, web.stripecount,
   575             linerange, lineidprefix)
   575             linerange, lineidprefix)
   576     return templateutil.mappinggenerator(_diffsgen, args=args, name='diffblock')
   576     return templateutil.mappinggenerator(_diffsgen, args=args, name='diffblock')
   577 
   577 
   578 def _compline(tmpl, type, leftlineno, leftline, rightlineno, rightline):
   578 def _compline(type, leftlineno, leftline, rightlineno, rightline):
   579     lineid = leftlineno and ("l%d" % leftlineno) or ''
   579     lineid = leftlineno and ("l%d" % leftlineno) or ''
   580     lineid += rightlineno and ("r%d" % rightlineno) or ''
   580     lineid += rightlineno and ("r%d" % rightlineno) or ''
   581     llno = '%d' % leftlineno if leftlineno else ''
   581     llno = '%d' % leftlineno if leftlineno else ''
   582     rlno = '%d' % rightlineno if rightlineno else ''
   582     rlno = '%d' % rightlineno if rightlineno else ''
   583     return tmpl.generate('comparisonline', {
   583     return {
   584         'type': type,
   584         'type': type,
   585         'lineid': lineid,
   585         'lineid': lineid,
   586         'leftlineno': leftlineno,
   586         'leftlineno': leftlineno,
   587         'leftlinenumber': "% 6s" % llno,
   587         'leftlinenumber': "% 6s" % llno,
   588         'leftline': leftline or '',
   588         'leftline': leftline or '',
   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):
   594 def _getcompblockgen(context, leftlines, rightlines, opcodes):
   595     for type, llo, lhi, rlo, rhi in opcodes:
   595     for type, llo, lhi, rlo, rhi in opcodes:
   596         len1 = lhi - llo
   596         len1 = lhi - llo
   597         len2 = rhi - rlo
   597         len2 = rhi - rlo
   598         count = min(len1, len2)
   598         count = min(len1, len2)
   599         for i in xrange(count):
   599         for i in xrange(count):
   600             yield _compline(tmpl,
   600             yield _compline(type=type,
   601                             type=type,
       
   602                             leftlineno=llo + i + 1,
   601                             leftlineno=llo + i + 1,
   603                             leftline=leftlines[llo + i],
   602                             leftline=leftlines[llo + i],
   604                             rightlineno=rlo + i + 1,
   603                             rightlineno=rlo + i + 1,
   605                             rightline=rightlines[rlo + i])
   604                             rightline=rightlines[rlo + i])
   606         if len1 > len2:
   605         if len1 > len2:
   607             for i in xrange(llo + count, lhi):
   606             for i in xrange(llo + count, lhi):
   608                 yield _compline(tmpl,
   607                 yield _compline(type=type,
   609                                 type=type,
       
   610                                 leftlineno=i + 1,
   608                                 leftlineno=i + 1,
   611                                 leftline=leftlines[i],
   609                                 leftline=leftlines[i],
   612                                 rightlineno=None,
   610                                 rightlineno=None,
   613                                 rightline=None)
   611                                 rightline=None)
   614         elif len2 > len1:
   612         elif len2 > len1:
   615             for i in xrange(rlo + count, rhi):
   613             for i in xrange(rlo + count, rhi):
   616                 yield _compline(tmpl,
   614                 yield _compline(type=type,
   617                                 type=type,
       
   618                                 leftlineno=None,
   615                                 leftlineno=None,
   619                                 leftline=None,
   616                                 leftline=None,
   620                                 rightlineno=i + 1,
   617                                 rightlineno=i + 1,
   621                                 rightline=rightlines[i])
   618                                 rightline=rightlines[i])
   622 
   619 
       
   620 def _getcompblock(leftlines, rightlines, opcodes):
       
   621     args = (leftlines, rightlines, opcodes)
       
   622     return templateutil.mappinggenerator(_getcompblockgen, args=args,
       
   623                                          name='comparisonline')
       
   624 
   623 def compare(tmpl, context, leftlines, rightlines):
   625 def compare(tmpl, context, leftlines, rightlines):
   624     '''Generator function that provides side-by-side comparison data.'''
   626     '''Generator function that provides side-by-side comparison data.'''
   625     s = difflib.SequenceMatcher(None, leftlines, rightlines)
   627     s = difflib.SequenceMatcher(None, leftlines, rightlines)
   626     if context < 0:
   628     if context < 0:
   627         l = _getcompblock(tmpl, leftlines, rightlines, s.get_opcodes())
   629         l = _getcompblock(leftlines, rightlines, s.get_opcodes())
   628         yield tmpl.generate('comparisonblock', {'lines': l})
   630         yield tmpl.generate('comparisonblock', {'lines': l})
   629     else:
   631     else:
   630         for oc in s.get_grouped_opcodes(n=context):
   632         for oc in s.get_grouped_opcodes(n=context):
   631             l = _getcompblock(tmpl, leftlines, rightlines, oc)
   633             l = _getcompblock(leftlines, rightlines, oc)
   632             yield tmpl.generate('comparisonblock', {'lines': l})
   634             yield tmpl.generate('comparisonblock', {'lines': l})
   633 
   635 
   634 def diffstatgen(ctx, basectx):
   636 def diffstatgen(ctx, basectx):
   635     '''Generator function that provides the diffstat data.'''
   637     '''Generator function that provides the diffstat data.'''
   636 
   638