Mercurial > public > mercurial-scm > hg
comparison mercurial/bundlerepo.py @ 34293:0fe62d8bdd50
bundlerepo: update to use new deltaiter api
Differential Revision: https://phab.mercurial-scm.org/D745
author | Durham Goode <durham@fb.com> |
---|---|
date | Wed, 20 Sep 2017 09:39:03 -0700 |
parents | 21fc747e1bc5 |
children | a2dfc723b6b5 |
comparison
equal
deleted
inserted
replaced
34292:311f6ccf8f23 | 34293:0fe62d8bdd50 |
---|---|
53 opener = vfsmod.readonlyvfs(opener) | 53 opener = vfsmod.readonlyvfs(opener) |
54 revlog.revlog.__init__(self, opener, indexfile) | 54 revlog.revlog.__init__(self, opener, indexfile) |
55 self.bundle = bundle | 55 self.bundle = bundle |
56 n = len(self) | 56 n = len(self) |
57 self.repotiprev = n - 1 | 57 self.repotiprev = n - 1 |
58 chain = None | |
59 self.bundlerevs = set() # used by 'bundle()' revset expression | 58 self.bundlerevs = set() # used by 'bundle()' revset expression |
60 getchunk = lambda: bundle.deltachunk(chain) | 59 for deltadata in bundle.deltaiter(): |
61 for chunkdata in iter(getchunk, {}): | 60 node, p1, p2, cs, deltabase, delta, flags = deltadata |
62 node = chunkdata['node'] | |
63 p1 = chunkdata['p1'] | |
64 p2 = chunkdata['p2'] | |
65 cs = chunkdata['cs'] | |
66 deltabase = chunkdata['deltabase'] | |
67 delta = chunkdata['delta'] | |
68 flags = chunkdata['flags'] | |
69 | 61 |
70 size = len(delta) | 62 size = len(delta) |
71 start = bundle.tell() - size | 63 start = bundle.tell() - size |
72 | 64 |
73 link = linkmapper(cs) | 65 link = linkmapper(cs) |
74 if node in self.nodemap: | 66 if node in self.nodemap: |
75 # this can happen if two branches make the same change | 67 # this can happen if two branches make the same change |
76 chain = node | |
77 self.bundlerevs.add(self.nodemap[node]) | 68 self.bundlerevs.add(self.nodemap[node]) |
78 continue | 69 continue |
79 | 70 |
80 for p in (p1, p2): | 71 for p in (p1, p2): |
81 if p not in self.nodemap: | 72 if p not in self.nodemap: |
91 e = (revlog.offset_type(start, flags), size, -1, baserev, link, | 82 e = (revlog.offset_type(start, flags), size, -1, baserev, link, |
92 self.rev(p1), self.rev(p2), node) | 83 self.rev(p1), self.rev(p2), node) |
93 self.index.insert(-1, e) | 84 self.index.insert(-1, e) |
94 self.nodemap[node] = n | 85 self.nodemap[node] = n |
95 self.bundlerevs.add(n) | 86 self.bundlerevs.add(n) |
96 chain = node | |
97 n += 1 | 87 n += 1 |
98 | 88 |
99 def _chunk(self, rev): | 89 def _chunk(self, rev): |
100 # Warning: in case of bundle, the diff is against what we stored as | 90 # Warning: in case of bundle, the diff is against what we stored as |
101 # delta base, not against rev - 1 | 91 # delta base, not against rev - 1 |