# HG changeset patch # User Pierre-Yves David # Date 1684134096 -7200 # Node ID 0935b9db21b6e85904b2e91c86fd6c3294831dbb # Parent 2eb7f0b5a4993f23fc64dc4b810484a7d4d31d4a upgrade: use StoreEntry object in upgrade We will make more use of the API in the next changeset, but just moving to use entry is a significant change for the engine codebase. diff -r 2eb7f0b5a499 -r 0935b9db21b6 mercurial/upgrade_utils/engine.py --- a/mercurial/upgrade_utils/engine.py Mon May 15 09:01:18 2023 +0200 +++ b/mercurial/upgrade_utils/engine.py Mon May 15 09:01:36 2023 +0200 @@ -47,11 +47,13 @@ return sidedatamod.get_sidedata_helpers(srcrepo, dstrepo._wanted_sidedata) -def _revlogfrompath(repo, rl_type, path): - """Obtain a revlog from a repo path. +def _revlog_from_store_entry(repo, entry): + """Obtain a revlog from a repo store entry. An instance of the appropriate class is returned. """ + rl_type = entry.revlog_type + path = entry.unencoded_path if rl_type & store.FILEFLAGS_CHANGELOG: return changelog.changelog(repo.svfs) elif rl_type & store.FILEFLAGS_MANIFESTLOG: @@ -72,7 +74,7 @@ return filelog.filelog(repo.svfs, path) -def _copyrevlog(tr, destrepo, oldrl, rl_type, unencodedname): +def _copyrevlog(tr, destrepo, oldrl, entry): """copy all relevant files for `oldrl` into `destrepo` store Files are copied "as is" without any transformation. The copy is performed @@ -80,7 +82,7 @@ content is compatible with format of the destination repository. """ oldrl = getattr(oldrl, '_revlog', oldrl) - newrl = _revlogfrompath(destrepo, rl_type, unencodedname) + newrl = _revlog_from_store_entry(destrepo, entry) newrl = getattr(newrl, '_revlog', newrl) oldvfs = oldrl.opener @@ -98,7 +100,8 @@ if copydata: util.copyfile(olddata, newdata) - if rl_type & store.FILEFLAGS_FILELOG: + if entry.revlog_type & store.FILEFLAGS_FILELOG: + unencodedname = entry.unencoded_path destrepo.svfs.fncache.add(unencodedname) if copydata: destrepo.svfs.fncache.add(unencodedname[:-2] + b'.d') @@ -133,19 +136,20 @@ dstrepo, tr, old_revlog, - rl_type, - unencoded, + entry, upgrade_op, sidedata_helpers, oncopiedrevision, ): """returns the new revlog object created""" newrl = None - if matchrevlog(upgrade_op.revlogs_to_process, rl_type): + revlog_path = entry.unencoded_path + if matchrevlog(upgrade_op.revlogs_to_process, entry.revlog_type): ui.note( - _(b'cloning %d revisions from %s\n') % (len(old_revlog), unencoded) + _(b'cloning %d revisions from %s\n') + % (len(old_revlog), revlog_path) ) - newrl = _revlogfrompath(dstrepo, rl_type, unencoded) + newrl = _revlog_from_store_entry(dstrepo, entry) old_revlog.clone( tr, newrl, @@ -156,10 +160,10 @@ ) else: msg = _(b'blindly copying %s containing %i revisions\n') - ui.note(msg % (unencoded, len(old_revlog))) - _copyrevlog(tr, dstrepo, old_revlog, rl_type, unencoded) + ui.note(msg % (revlog_path, len(old_revlog))) + _copyrevlog(tr, dstrepo, old_revlog, entry) - newrl = _revlogfrompath(dstrepo, rl_type, unencoded) + newrl = _revlog_from_store_entry(dstrepo, entry) return newrl @@ -203,9 +207,8 @@ for entry in alldatafiles: if not (entry.is_revlog and entry.is_revlog_main): continue - unencoded = entry.unencoded_path - rl = _revlogfrompath(srcrepo, entry.revlog_type, unencoded) + rl = _revlog_from_store_entry(srcrepo, entry) info = rl.storageinfo( exclusivefiles=True, @@ -223,18 +226,18 @@ # This is for the separate progress bars. if entry.revlog_type & store.FILEFLAGS_CHANGELOG: - changelogs[unencoded] = entry.revlog_type + changelogs[entry.target_id] = entry crevcount += len(rl) csrcsize += datasize crawsize += rawsize elif entry.revlog_type & store.FILEFLAGS_MANIFESTLOG: - manifests[unencoded] = entry.revlog_type + manifests[entry.target_id] = entry mcount += 1 mrevcount += len(rl) msrcsize += datasize mrawsize += rawsize elif entry.revlog_type & store.FILEFLAGS_FILELOG: - filelogs[unencoded] = entry.revlog_type + filelogs[entry.target_id] = entry fcount += 1 frevcount += len(rl) fsrcsize += datasize @@ -279,16 +282,15 @@ ) ) progress = srcrepo.ui.makeprogress(_(b'file revisions'), total=frevcount) - for unencoded, rl_type in sorted(filelogs.items()): - oldrl = _revlogfrompath(srcrepo, rl_type, unencoded) + for target_id, entry in sorted(filelogs.items()): + oldrl = _revlog_from_store_entry(srcrepo, entry) newrl = _perform_clone( ui, dstrepo, tr, oldrl, - rl_type, - unencoded, + entry, upgrade_op, sidedata_helpers, oncopiedrevision, @@ -321,15 +323,14 @@ progress = srcrepo.ui.makeprogress( _(b'manifest revisions'), total=mrevcount ) - for unencoded, rl_type in sorted(manifests.items()): - oldrl = _revlogfrompath(srcrepo, rl_type, unencoded) + for target_id, entry in sorted(manifests.items()): + oldrl = _revlog_from_store_entry(srcrepo, entry) newrl = _perform_clone( ui, dstrepo, tr, oldrl, - rl_type, - unencoded, + entry, upgrade_op, sidedata_helpers, oncopiedrevision, @@ -361,15 +362,14 @@ progress = srcrepo.ui.makeprogress( _(b'changelog revisions'), total=crevcount ) - for unencoded, rl_type in sorted(changelogs.items()): - oldrl = _revlogfrompath(srcrepo, rl_type, unencoded) + for target_id, entry in sorted(changelogs.items()): + oldrl = _revlog_from_store_entry(srcrepo, entry) newrl = _perform_clone( ui, dstrepo, tr, oldrl, - rl_type, - unencoded, + entry, upgrade_op, sidedata_helpers, oncopiedrevision,