comparison mercurial/hg.py @ 109:95699294f580

Annotate was being too clever trying to work in place, and triggering its assert. Simplify it, fix it, and speed it up a tiny bit.
author mpm@selenic.com
date Fri, 20 May 2005 17:22:02 -0800
parents 707a7481a861
children c37c7f784ee3
comparison
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