mercurial/hg.py
changeset 109 95699294f580
parent 107 707a7481a861
child 110 c37c7f784ee3
equal deleted inserted replaced
108:8d55c2d72c7c 109:95699294f580
    36             revs.append(node)
    36             revs.append(node)
    37             node = self.parents(node)[0]
    37             node = self.parents(node)[0]
    38         revs.reverse()
    38         revs.reverse()
    39         prev = []
    39         prev = []
    40         annotate = []
    40         annotate = []
       
    41         
    41         for node in revs:
    42         for node in revs:
    42             curr = self.read(node).splitlines(1)
    43             curr = self.read(node).splitlines(1)
    43             linkrev = self.linkrev(node)
    44             linkrev = self.linkrev(node)
    44             sm = SequenceMatcher(None, prev, curr)
    45             sm = SequenceMatcher(None, prev, curr)
    45             offset = 0
    46             new = []
    46             for o, m, n, s, t in sm.get_opcodes():
    47             for o, m, n, s, t in sm.get_opcodes():
    47                 if o in ('insert','replace'):
    48                 if o == 'equal':
    48                     annotate[m+offset:n+offset] = \
    49                     new += annotate[m:n]
    49                         [ (linkrev, l) for l in curr[s:t]]
    50                 else:
    50                     if o == 'insert':
    51                     new += [(linkrev, l) for l in curr[s:t]]
    51                         offset += m-n
    52             annotate, prev = new, curr
    52                 elif o == 'delete':
       
    53                     del annotate[m+offset:n+offset]
       
    54                     offset -= m-n
       
    55             assert len(annotate) == len(curr)
       
    56             prev = curr
       
    57         return annotate
    53         return annotate
    58 
    54 
    59 class manifest(revlog):
    55 class manifest(revlog):
    60     def __init__(self, opener):
    56     def __init__(self, opener):
    61         self.mapcache = None
    57         self.mapcache = None