mercurial/patch.py
changeset 15201 2c4fdee4d1a8
parent 15159 85322c19c831
child 15363 628a4a9e411d
equal deleted inserted replaced
15200:797bf1dc1ff8 15201:2c4fdee4d1a8
  1617     else:
  1617     else:
  1618         return difffn(opts, None)
  1618         return difffn(opts, None)
  1619 
  1619 
  1620 def difflabel(func, *args, **kw):
  1620 def difflabel(func, *args, **kw):
  1621     '''yields 2-tuples of (output, label) based on the output of func()'''
  1621     '''yields 2-tuples of (output, label) based on the output of func()'''
  1622     prefixes = [('diff', 'diff.diffline'),
  1622     headprefixes = [('diff', 'diff.diffline'),
  1623                 ('copy', 'diff.extended'),
  1623                     ('copy', 'diff.extended'),
  1624                 ('rename', 'diff.extended'),
  1624                     ('rename', 'diff.extended'),
  1625                 ('old', 'diff.extended'),
  1625                     ('old', 'diff.extended'),
  1626                 ('new', 'diff.extended'),
  1626                     ('new', 'diff.extended'),
  1627                 ('deleted', 'diff.extended'),
  1627                     ('deleted', 'diff.extended'),
  1628                 ('---', 'diff.file_a'),
  1628                     ('---', 'diff.file_a'),
  1629                 ('+++', 'diff.file_b'),
  1629                     ('+++', 'diff.file_b')]
  1630                 ('@@', 'diff.hunk'),
  1630     textprefixes = [('@', 'diff.hunk'),
  1631                 ('-', 'diff.deleted'),
  1631                     ('-', 'diff.deleted'),
  1632                 ('+', 'diff.inserted')]
  1632                     ('+', 'diff.inserted')]
  1633 
  1633     head = False
  1634     for chunk in func(*args, **kw):
  1634     for chunk in func(*args, **kw):
  1635         lines = chunk.split('\n')
  1635         lines = chunk.split('\n')
  1636         for i, line in enumerate(lines):
  1636         for i, line in enumerate(lines):
  1637             if i != 0:
  1637             if i != 0:
  1638                 yield ('\n', '')
  1638                 yield ('\n', '')
       
  1639             if head:
       
  1640                 if line.startswith('@'):
       
  1641                     head = False
       
  1642             else:
       
  1643                 if line and not line[0] in ' +-@':
       
  1644                     head = True
  1639             stripline = line
  1645             stripline = line
  1640             if line and line[0] in '+-':
  1646             if not head and line and line[0] in '+-':
  1641                 # highlight trailing whitespace, but only in changed lines
  1647                 # highlight trailing whitespace, but only in changed lines
  1642                 stripline = line.rstrip()
  1648                 stripline = line.rstrip()
       
  1649             prefixes = textprefixes
       
  1650             if head:
       
  1651                 prefixes = headprefixes
  1643             for prefix, label in prefixes:
  1652             for prefix, label in prefixes:
  1644                 if stripline.startswith(prefix):
  1653                 if stripline.startswith(prefix):
  1645                     yield (stripline, label)
  1654                     yield (stripline, label)
  1646                     break
  1655                     break
  1647             else:
  1656             else: