Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/unionrepo.py @ 47164: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 | 130c9f7ed914 |
comparison
equal
deleted
inserted
replaced
47163:396442cd7e6a | 47164:8d3c2f9d4af7 |
---|---|
31 vfs as vfsmod, | 31 vfs as vfsmod, |
32 ) | 32 ) |
33 | 33 |
34 | 34 |
35 class unionrevlog(revlog.revlog): | 35 class unionrevlog(revlog.revlog): |
36 def __init__(self, opener, indexfile, revlog2, linkmapper): | 36 def __init__(self, opener, radix, revlog2, linkmapper): |
37 # How it works: | 37 # How it works: |
38 # To retrieve a revision, we just need to know the node id so we can | 38 # To retrieve a revision, we just need to know the node id so we can |
39 # look it up in revlog2. | 39 # look it up in revlog2. |
40 # | 40 # |
41 # To differentiate a rev in the second revlog from a rev in the revlog, | 41 # To differentiate a rev in the second revlog from a rev in the revlog, |
43 opener = vfsmod.readonlyvfs(opener) | 43 opener = vfsmod.readonlyvfs(opener) |
44 target = getattr(revlog2, 'target', None) | 44 target = getattr(revlog2, 'target', None) |
45 if target is None: | 45 if target is None: |
46 # a revlog wrapper, eg: the manifestlog that is not an actual revlog | 46 # a revlog wrapper, eg: the manifestlog that is not an actual revlog |
47 target = revlog2._revlog.target | 47 target = revlog2._revlog.target |
48 revlog.revlog.__init__(self, opener, target=target, indexfile=indexfile) | 48 revlog.revlog.__init__(self, opener, target=target, radix=radix) |
49 self.revlog2 = revlog2 | 49 self.revlog2 = revlog2 |
50 | 50 |
51 n = len(self) | 51 n = len(self) |
52 self.repotiprev = n - 1 | 52 self.repotiprev = n - 1 |
53 self.bundlerevs = set() # used by 'bundle()' revset expression | 53 self.bundlerevs = set() # used by 'bundle()' revset expression |
162 class unionchangelog(unionrevlog, changelog.changelog): | 162 class unionchangelog(unionrevlog, changelog.changelog): |
163 def __init__(self, opener, opener2): | 163 def __init__(self, opener, opener2): |
164 changelog.changelog.__init__(self, opener) | 164 changelog.changelog.__init__(self, opener) |
165 linkmapper = None | 165 linkmapper = None |
166 changelog2 = changelog.changelog(opener2) | 166 changelog2 = changelog.changelog(opener2) |
167 unionrevlog.__init__( | 167 unionrevlog.__init__(self, opener, self.radix, changelog2, linkmapper) |
168 self, opener, self._indexfile, changelog2, linkmapper | |
169 ) | |
170 | 168 |
171 | 169 |
172 class unionmanifest(unionrevlog, manifest.manifestrevlog): | 170 class unionmanifest(unionrevlog, manifest.manifestrevlog): |
173 def __init__(self, nodeconstants, opener, opener2, linkmapper): | 171 def __init__(self, nodeconstants, opener, opener2, linkmapper): |
174 manifest.manifestrevlog.__init__(self, nodeconstants, opener) | 172 manifest.manifestrevlog.__init__(self, nodeconstants, opener) |
175 manifest2 = manifest.manifestrevlog(nodeconstants, opener2) | 173 manifest2 = manifest.manifestrevlog(nodeconstants, opener2) |
176 unionrevlog.__init__( | 174 unionrevlog.__init__( |
177 self, opener, self._revlog._indexfile, manifest2, linkmapper | 175 self, opener, self._revlog.radix, manifest2, linkmapper |
178 ) | 176 ) |
179 | 177 |
180 | 178 |
181 class unionfilelog(filelog.filelog): | 179 class unionfilelog(filelog.filelog): |
182 def __init__(self, opener, path, opener2, linkmapper, repo): | 180 def __init__(self, opener, path, opener2, linkmapper, repo): |
183 filelog.filelog.__init__(self, opener, path) | 181 filelog.filelog.__init__(self, opener, path) |
184 filelog2 = filelog.filelog(opener2, path) | 182 filelog2 = filelog.filelog(opener2, path) |
185 self._revlog = unionrevlog( | 183 self._revlog = unionrevlog( |
186 opener, self._revlog._indexfile, filelog2._revlog, linkmapper | 184 opener, self._revlog.radix, filelog2._revlog, linkmapper |
187 ) | 185 ) |
188 self._repo = repo | 186 self._repo = repo |
189 self.repotiprev = self._revlog.repotiprev | 187 self.repotiprev = self._revlog.repotiprev |
190 self.revlog2 = self._revlog.revlog2 | 188 self.revlog2 = self._revlog.revlog2 |
191 | 189 |