29 # len(index[r]). If the tuple is bigger than 7, it is a bundle |
29 # len(index[r]). If the tuple is bigger than 7, it is a bundle |
30 # (it is bigger since we store the node to which the delta is) |
30 # (it is bigger since we store the node to which the delta is) |
31 # |
31 # |
32 revlog.revlog.__init__(self, opener, indexfile, datafile) |
32 revlog.revlog.__init__(self, opener, indexfile, datafile) |
33 self.bundlefile = bundlefile |
33 self.bundlefile = bundlefile |
|
34 self.basemap = {} |
34 def chunkpositer(): |
35 def chunkpositer(): |
35 for chunk in changegroup.chunkiter(bundlefile): |
36 for chunk in changegroup.chunkiter(bundlefile): |
36 pos = bundlefile.tell() |
37 pos = bundlefile.tell() |
37 yield chunk, pos - len(chunk) |
38 yield chunk, pos - len(chunk) |
38 n = self.count() |
39 n = self.count() |
56 link = linkmapper(cs) |
57 link = linkmapper(cs) |
57 |
58 |
58 if not prev: |
59 if not prev: |
59 prev = p1 |
60 prev = p1 |
60 # start, size, base is not used, link, p1, p2, delta ref |
61 # start, size, base is not used, link, p1, p2, delta ref |
61 e = (start, size, None, link, p1, p2, node, prev) |
62 e = (start, size, None, link, p1, p2, node) |
|
63 self.basemap[n] = prev |
62 self.index.append(e) |
64 self.index.append(e) |
63 self.nodemap[node] = n |
65 self.nodemap[node] = n |
64 prev = node |
66 prev = node |
65 n += 1 |
67 n += 1 |
66 |
68 |
67 def bundle(self, rev): |
69 def bundle(self, rev): |
68 """is rev from the bundle""" |
70 """is rev from the bundle""" |
69 if rev < 0: |
71 if rev < 0: |
70 return False |
72 return False |
71 return len(self.index[rev]) > 7 |
73 return rev in self.basemap |
72 def bundlebase(self, rev): return self.index[rev][7] |
74 def bundlebase(self, rev): return self.basemap[rev] |
73 def chunk(self, rev): |
75 def chunk(self, rev, df=None): |
74 # Warning: in case of bundle, the diff is against bundlebase, |
76 # Warning: in case of bundle, the diff is against bundlebase, |
75 # not against rev - 1 |
77 # not against rev - 1 |
76 # XXX: could use some caching |
78 # XXX: could use some caching |
77 if not self.bundle(rev): |
79 if not self.bundle(rev): |
78 return revlog.revlog.chunk(self, rev) |
80 return revlog.revlog.chunk(self, rev) |