Mercurial > public > mercurial-scm > hg
comparison mercurial/bundlerepo.py @ 47150:8d3c2f9d4af7
revlog: use a "radix" to address revlog
Instead of pointing to the index directly and to derive the other file from
that, we directly provide the radix and let the revlog determine the associated
file path internally. This is more robust and will give us more flexibility for
picking this file name in the future.
Differential Revision: https://phab.mercurial-scm.org/D10576
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 03 May 2021 12:22:36 +0200 |
parents | a07d5cb03a85 |
children | 96ee8ca99f5a |
comparison
equal
deleted
inserted
replaced
47149:396442cd7e6a | 47150:8d3c2f9d4af7 |
---|---|
50 constants as revlog_constants, | 50 constants as revlog_constants, |
51 ) | 51 ) |
52 | 52 |
53 | 53 |
54 class bundlerevlog(revlog.revlog): | 54 class bundlerevlog(revlog.revlog): |
55 def __init__(self, opener, target, indexfile, cgunpacker, linkmapper): | 55 def __init__(self, opener, target, radix, cgunpacker, linkmapper): |
56 # How it works: | 56 # How it works: |
57 # To retrieve a revision, we need to know the offset of the revision in | 57 # To retrieve a revision, we need to know the offset of the revision in |
58 # the bundle (an unbundle object). We store this offset in the index | 58 # the bundle (an unbundle object). We store this offset in the index |
59 # (start). The base of the delta is stored in the base field. | 59 # (start). The base of the delta is stored in the base field. |
60 # | 60 # |
61 # To differentiate a rev in the bundle from a rev in the revlog, we | 61 # To differentiate a rev in the bundle from a rev in the revlog, we |
62 # check revision against repotiprev. | 62 # check revision against repotiprev. |
63 opener = vfsmod.readonlyvfs(opener) | 63 opener = vfsmod.readonlyvfs(opener) |
64 revlog.revlog.__init__(self, opener, target=target, indexfile=indexfile) | 64 revlog.revlog.__init__(self, opener, target=target, radix=radix) |
65 self.bundle = cgunpacker | 65 self.bundle = cgunpacker |
66 n = len(self) | 66 n = len(self) |
67 self.repotiprev = n - 1 | 67 self.repotiprev = n - 1 |
68 self.bundlerevs = set() # used by 'bundle()' revset expression | 68 self.bundlerevs = set() # used by 'bundle()' revset expression |
69 for deltadata in cgunpacker.deltaiter(): | 69 for deltadata in cgunpacker.deltaiter(): |
178 linkmapper = lambda x: x | 178 linkmapper = lambda x: x |
179 bundlerevlog.__init__( | 179 bundlerevlog.__init__( |
180 self, | 180 self, |
181 opener, | 181 opener, |
182 (revlog_constants.KIND_CHANGELOG, None), | 182 (revlog_constants.KIND_CHANGELOG, None), |
183 self._indexfile, | 183 self.radix, |
184 cgunpacker, | 184 cgunpacker, |
185 linkmapper, | 185 linkmapper, |
186 ) | 186 ) |
187 | 187 |
188 | 188 |
199 manifest.manifestrevlog.__init__(self, nodeconstants, opener, tree=dir) | 199 manifest.manifestrevlog.__init__(self, nodeconstants, opener, tree=dir) |
200 bundlerevlog.__init__( | 200 bundlerevlog.__init__( |
201 self, | 201 self, |
202 opener, | 202 opener, |
203 (revlog_constants.KIND_MANIFESTLOG, dir), | 203 (revlog_constants.KIND_MANIFESTLOG, dir), |
204 self._revlog._indexfile, | 204 self._revlog.radix, |
205 cgunpacker, | 205 cgunpacker, |
206 linkmapper, | 206 linkmapper, |
207 ) | 207 ) |
208 if dirlogstarts is None: | 208 if dirlogstarts is None: |
209 dirlogstarts = {} | 209 dirlogstarts = {} |
231 filelog.filelog.__init__(self, opener, path) | 231 filelog.filelog.__init__(self, opener, path) |
232 self._revlog = bundlerevlog( | 232 self._revlog = bundlerevlog( |
233 opener, | 233 opener, |
234 # XXX should use the unencoded path | 234 # XXX should use the unencoded path |
235 target=(revlog_constants.KIND_FILELOG, path), | 235 target=(revlog_constants.KIND_FILELOG, path), |
236 indexfile=self._revlog._indexfile, | 236 radix=self._revlog.radix, |
237 cgunpacker=cgunpacker, | 237 cgunpacker=cgunpacker, |
238 linkmapper=linkmapper, | 238 linkmapper=linkmapper, |
239 ) | 239 ) |
240 | 240 |
241 | 241 |