##// END OF EJS Templates
store: add a `get_revlog_instance` method on revlog entries...
marmoute -
r51520:e1ee6910 default
parent child Browse files
Show More
@@ -19,6 +19,7 b' from .node import hex'
19 from . import (
19 from . import (
20 changelog,
20 changelog,
21 error,
21 error,
22 filelog,
22 manifest,
23 manifest,
23 policy,
24 policy,
24 pycompat,
25 pycompat,
@@ -545,6 +546,21 b' class RevlogStoreEntry(BaseStoreEntry):'
545 files.append(StoreFile(unencoded_path=path, **data))
546 files.append(StoreFile(unencoded_path=path, **data))
546 return files
547 return files
547
548
549 def get_revlog_instance(self, repo):
550 """Obtain a revlog instance from this store entry
551
552 An instance of the appropriate class is returned.
553 """
554 if self.is_changelog:
555 return changelog.changelog(repo.svfs)
556 elif self.is_manifestlog:
557 mandir = self.target_id.rstrip(b'/')
558 return manifest.manifestrevlog(
559 repo.nodeconstants, repo.svfs, tree=mandir
560 )
561 else:
562 return filelog.filelog(repo.svfs, self.target_id)
563
548
564
549 @attr.s(slots=True)
565 @attr.s(slots=True)
550 class StoreFile:
566 class StoreFile:
@@ -11,10 +11,7 b' import stat'
11 from ..i18n import _
11 from ..i18n import _
12 from ..pycompat import getattr
12 from ..pycompat import getattr
13 from .. import (
13 from .. import (
14 changelog,
15 error,
14 error,
16 filelog,
17 manifest,
18 metadata,
15 metadata,
19 pycompat,
16 pycompat,
20 requirements,
17 requirements,
@@ -47,22 +44,6 b' def get_sidedata_helpers(srcrepo, dstrep'
47 return sidedatamod.get_sidedata_helpers(srcrepo, dstrepo._wanted_sidedata)
44 return sidedatamod.get_sidedata_helpers(srcrepo, dstrepo._wanted_sidedata)
48
45
49
46
50 def _revlog_from_store_entry(repo, entry):
51 """Obtain a revlog from a repo store entry.
52
53 An instance of the appropriate class is returned.
54 """
55 if entry.is_changelog:
56 return changelog.changelog(repo.svfs)
57 elif entry.is_manifestlog:
58 mandir = entry.target_id.rstrip(b'/')
59 return manifest.manifestrevlog(
60 repo.nodeconstants, repo.svfs, tree=mandir
61 )
62 else:
63 return filelog.filelog(repo.svfs, entry.target_id)
64
65
66 def _copyrevlog(tr, destrepo, oldrl, entry):
47 def _copyrevlog(tr, destrepo, oldrl, entry):
67 """copy all relevant files for `oldrl` into `destrepo` store
48 """copy all relevant files for `oldrl` into `destrepo` store
68
49
@@ -71,7 +52,7 b' def _copyrevlog(tr, destrepo, oldrl, ent'
71 content is compatible with format of the destination repository.
52 content is compatible with format of the destination repository.
72 """
53 """
73 oldrl = getattr(oldrl, '_revlog', oldrl)
54 oldrl = getattr(oldrl, '_revlog', oldrl)
74 newrl = _revlog_from_store_entry(destrepo, entry)
55 newrl = entry.get_revlog_instance(destrepo)
75 newrl = getattr(newrl, '_revlog', newrl)
56 newrl = getattr(newrl, '_revlog', newrl)
76
57
77 oldvfs = oldrl.opener
58 oldvfs = oldrl.opener
@@ -138,7 +119,7 b' def _perform_clone('
138 _(b'cloning %d revisions from %s\n')
119 _(b'cloning %d revisions from %s\n')
139 % (len(old_revlog), revlog_path)
120 % (len(old_revlog), revlog_path)
140 )
121 )
141 newrl = _revlog_from_store_entry(dstrepo, entry)
122 newrl = entry.get_revlog_instance(dstrepo)
142 old_revlog.clone(
123 old_revlog.clone(
143 tr,
124 tr,
144 newrl,
125 newrl,
@@ -152,7 +133,7 b' def _perform_clone('
152 ui.note(msg % (revlog_path, len(old_revlog)))
133 ui.note(msg % (revlog_path, len(old_revlog)))
153 _copyrevlog(tr, dstrepo, old_revlog, entry)
134 _copyrevlog(tr, dstrepo, old_revlog, entry)
154
135
155 newrl = _revlog_from_store_entry(dstrepo, entry)
136 newrl = entry.get_revlog_instance(dstrepo)
156 return newrl
137 return newrl
157
138
158
139
@@ -197,7 +178,7 b' def _clonerevlogs('
197 if not entry.is_revlog:
178 if not entry.is_revlog:
198 continue
179 continue
199
180
200 rl = _revlog_from_store_entry(srcrepo, entry)
181 rl = entry.get_revlog_instance(srcrepo)
201
182
202 info = rl.storageinfo(
183 info = rl.storageinfo(
203 exclusivefiles=True,
184 exclusivefiles=True,
@@ -272,7 +253,7 b' def _clonerevlogs('
272 )
253 )
273 progress = srcrepo.ui.makeprogress(_(b'file revisions'), total=frevcount)
254 progress = srcrepo.ui.makeprogress(_(b'file revisions'), total=frevcount)
274 for target_id, entry in sorted(filelogs.items()):
255 for target_id, entry in sorted(filelogs.items()):
275 oldrl = _revlog_from_store_entry(srcrepo, entry)
256 oldrl = entry.get_revlog_instance(srcrepo)
276
257
277 newrl = _perform_clone(
258 newrl = _perform_clone(
278 ui,
259 ui,
@@ -313,7 +294,7 b' def _clonerevlogs('
313 _(b'manifest revisions'), total=mrevcount
294 _(b'manifest revisions'), total=mrevcount
314 )
295 )
315 for target_id, entry in sorted(manifests.items()):
296 for target_id, entry in sorted(manifests.items()):
316 oldrl = _revlog_from_store_entry(srcrepo, entry)
297 oldrl = entry.get_revlog_instance(srcrepo)
317 newrl = _perform_clone(
298 newrl = _perform_clone(
318 ui,
299 ui,
319 dstrepo,
300 dstrepo,
@@ -352,7 +333,7 b' def _clonerevlogs('
352 _(b'changelog revisions'), total=crevcount
333 _(b'changelog revisions'), total=crevcount
353 )
334 )
354 for target_id, entry in sorted(changelogs.items()):
335 for target_id, entry in sorted(changelogs.items()):
355 oldrl = _revlog_from_store_entry(srcrepo, entry)
336 oldrl = entry.get_revlog_instance(srcrepo)
356 newrl = _perform_clone(
337 newrl = _perform_clone(
357 ui,
338 ui,
358 dstrepo,
339 dstrepo,
General Comments 0
You need to be logged in to leave comments. Login now