mercurial/patch.py
branchstable
changeset 15273 384082750f2c
parent 15201 2c4fdee4d1a8
child 15363 628a4a9e411d
equal deleted inserted replaced
15191:fccd350acf79 15273:384082750f2c
   124     inheader = False
   124     inheader = False
   125     cur = []
   125     cur = []
   126 
   126 
   127     mimeheaders = ['content-type']
   127     mimeheaders = ['content-type']
   128 
   128 
   129     if not hasattr(stream, 'next'):
   129     if not util.safehasattr(stream, 'next'):
   130         # http responses, for example, have readline but not next
   130         # http responses, for example, have readline but not next
   131         stream = fiter(stream)
   131         stream = fiter(stream)
   132 
   132 
   133     for line in stream:
   133     for line in stream:
   134         cur.append(line)
   134         cur.append(line)
  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: