equal
deleted
inserted
replaced
39 new += parent[m:n] |
39 new += parent[m:n] |
40 else: |
40 else: |
41 new += child[s:t] |
41 new += child[s:t] |
42 return new |
42 return new |
43 |
43 |
|
44 # find all ancestors |
44 needed = {} |
45 needed = {} |
45 visit = [node] |
46 visit = [node] |
46 while visit: |
47 while visit: |
47 n = visit.pop(0) |
48 n = visit.pop(0) |
48 for p in self.parents(n): |
49 for p in self.parents(n): |
49 if p not in needed: |
50 if p not in needed: |
50 needed[p] = 1 |
51 needed[p] = 1 |
51 visit.append(p) |
52 visit.append(p) |
52 |
53 else: |
|
54 # count how many times we'll use this |
|
55 needed[p] += 1 |
|
56 |
|
57 # sort by revision which is a topological order |
53 visit = needed.keys() |
58 visit = needed.keys() |
54 visit = [ (self.rev(n), n) for n in visit ] |
59 visit = [ (self.rev(n), n) for n in visit ] |
55 visit.sort() |
60 visit.sort() |
56 visit = [ p[1] for p in visit ] |
61 visit = [ p[1] for p in visit ] |
57 hist = {} |
62 hist = {} |
59 for n in visit: |
64 for n in visit: |
60 curr = decorate(self.read(n), self.linkrev(n)) |
65 curr = decorate(self.read(n), self.linkrev(n)) |
61 for p in self.parents(n): |
66 for p in self.parents(n): |
62 if p != nullid: |
67 if p != nullid: |
63 curr = pair(hist[p], curr) |
68 curr = pair(hist[p], curr) |
|
69 # trim the history of unneeded revs |
|
70 needed[p] -= 1 |
|
71 if not needed[p]: |
|
72 del hist[p] |
64 hist[n] = curr |
73 hist[n] = curr |
65 |
74 |
66 return hist[n] |
75 return hist[n] |
67 |
76 |
68 class manifest(revlog): |
77 class manifest(revlog): |