Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/upgrade_utils/engine.py @ 46220:1ca7865c245d
engine: refactor code to replace stores in separate function
In not all upgrades, we need to change the whole store. For example, when
upgrading repository to share-safe mode, we don't touch revlogs at all hence
store cloning and copying is not required.
The store replacing code needs to be made aware about what all has changed and
hence only copy/rename those things. To kickstart that, this patch moves
existing logic into a separate function.
Differential Revision: https://phab.mercurial-scm.org/D9674
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Thu, 31 Dec 2020 14:45:16 +0530 |
parents | 481d9aed669c |
children | e22aed089567 |
comparison
equal
deleted
inserted
replaced
46219:481d9aed669c | 46220:1ca7865c245d |
---|---|
406 return False | 406 return False |
407 | 407 |
408 return True | 408 return True |
409 | 409 |
410 | 410 |
411 def _replacestores(currentrepo, upgradedrepo, backupvfs, upgrade_op): | |
412 """Replace the stores after current repository is upgraded | |
413 | |
414 Creates a backup of current repository store at backup path | |
415 Replaces upgraded store files in current repo from upgraded one | |
416 | |
417 Arguments: | |
418 currentrepo: repo object of current repository | |
419 upgradedrepo: repo object of the upgraded data | |
420 backupvfs: vfs object for the backup path | |
421 upgrade_op: upgrade operation object | |
422 to be used to decide what all is upgraded | |
423 """ | |
424 # TODO: don't blindly rename everything in store | |
425 # There can be upgrades where store is not touched at all | |
426 util.rename(currentrepo.spath, backupvfs.join(b'store')) | |
427 util.rename(upgradedrepo.spath, currentrepo.spath) | |
428 | |
429 | |
411 def finishdatamigration(ui, srcrepo, dstrepo, requirements): | 430 def finishdatamigration(ui, srcrepo, dstrepo, requirements): |
412 """Hook point for extensions to perform additional actions during upgrade. | 431 """Hook point for extensions to perform additional actions during upgrade. |
413 | 432 |
414 This function is called after revlogs and store files have been copied but | 433 This function is called after revlogs and store files have been copied but |
415 before the new store is swapped into the original location. | 434 before the new store is swapped into the original location. |
488 # Now swap in the new store directory. Doing it as a rename should make | 507 # Now swap in the new store directory. Doing it as a rename should make |
489 # the operation nearly instantaneous and atomic (at least in well-behaved | 508 # the operation nearly instantaneous and atomic (at least in well-behaved |
490 # environments). | 509 # environments). |
491 ui.status(_(b'replacing store...\n')) | 510 ui.status(_(b'replacing store...\n')) |
492 tstart = util.timer() | 511 tstart = util.timer() |
493 util.rename(srcrepo.spath, backupvfs.join(b'store')) | 512 _replacestores(srcrepo, dstrepo, backupvfs, upgrade_op) |
494 util.rename(dstrepo.spath, srcrepo.spath) | |
495 elapsed = util.timer() - tstart | 513 elapsed = util.timer() - tstart |
496 ui.status( | 514 ui.status( |
497 _( | 515 _( |
498 b'store replacement complete; repository was inconsistent for ' | 516 b'store replacement complete; repository was inconsistent for ' |
499 b'%0.1fs\n' | 517 b'%0.1fs\n' |