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