Mercurial > hg > mercurial-crew-with-dirclash
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 |