Mercurial > public > mercurial-scm > hg
comparison mercurial/upgrade_utils/engine.py @ 46056:c407513a44a3
upgrade: start moving the "to be happening" data in a dedicated object
The upgrade code has a lot of logic to determine which action needs to be
performed depending of various element (sometimes depending from each other). It
would be nice to have a consistent object representing this. That could be
cleanly passed and avoid some logic duplication.
So we create this object as a start.
Differential Revision: https://phab.mercurial-scm.org/D9487
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 01 Dec 2020 22:37:34 +0100 |
parents | f105c49e89cd |
children | dfddcbb0c244 |
comparison
equal
deleted
inserted
replaced
46055:7740d5102760 | 46056:c407513a44a3 |
---|---|
381 This function is called after revlogs and store files have been copied but | 381 This function is called after revlogs and store files have been copied but |
382 before the new store is swapped into the original location. | 382 before the new store is swapped into the original location. |
383 """ | 383 """ |
384 | 384 |
385 | 385 |
386 def upgrade( | 386 def upgrade(ui, srcrepo, dstrepo, upgrade_op): |
387 ui, srcrepo, dstrepo, requirements, actions, revlogs=UPGRADE_ALL_REVLOGS | |
388 ): | |
389 """Do the low-level work of upgrading a repository. | 387 """Do the low-level work of upgrading a repository. |
390 | 388 |
391 The upgrade is effectively performed as a copy between a source | 389 The upgrade is effectively performed as a copy between a source |
392 repository and a temporary destination repository. | 390 repository and a temporary destination repository. |
393 | 391 |
403 b'(it is safe to interrupt this process any time before ' | 401 b'(it is safe to interrupt this process any time before ' |
404 b'data migration completes)\n' | 402 b'data migration completes)\n' |
405 ) | 403 ) |
406 ) | 404 ) |
407 | 405 |
408 if b're-delta-all' in actions: | 406 if b're-delta-all' in upgrade_op.actions: |
409 deltareuse = revlog.revlog.DELTAREUSENEVER | 407 deltareuse = revlog.revlog.DELTAREUSENEVER |
410 elif b're-delta-parent' in actions: | 408 elif b're-delta-parent' in upgrade_op.actions: |
411 deltareuse = revlog.revlog.DELTAREUSESAMEREVS | 409 deltareuse = revlog.revlog.DELTAREUSESAMEREVS |
412 elif b're-delta-multibase' in actions: | 410 elif b're-delta-multibase' in upgrade_op.actions: |
413 deltareuse = revlog.revlog.DELTAREUSESAMEREVS | 411 deltareuse = revlog.revlog.DELTAREUSESAMEREVS |
414 elif b're-delta-fulladd' in actions: | 412 elif b're-delta-fulladd' in upgrade_op.actions: |
415 deltareuse = revlog.revlog.DELTAREUSEFULLADD | 413 deltareuse = revlog.revlog.DELTAREUSEFULLADD |
416 else: | 414 else: |
417 deltareuse = revlog.revlog.DELTAREUSEALWAYS | 415 deltareuse = revlog.revlog.DELTAREUSEALWAYS |
418 | 416 |
419 with dstrepo.transaction(b'upgrade') as tr: | 417 with dstrepo.transaction(b'upgrade') as tr: |
421 ui, | 419 ui, |
422 srcrepo, | 420 srcrepo, |
423 dstrepo, | 421 dstrepo, |
424 tr, | 422 tr, |
425 deltareuse, | 423 deltareuse, |
426 b're-delta-multibase' in actions, | 424 b're-delta-multibase' in upgrade_op.actions, |
427 revlogs=revlogs, | 425 revlogs=upgrade_op.revlogs_to_process, |
428 ) | 426 ) |
429 | 427 |
430 # Now copy other files in the store directory. | 428 # Now copy other files in the store directory. |
431 # The sorted() makes execution deterministic. | 429 # The sorted() makes execution deterministic. |
432 for p, kind, st in sorted(srcrepo.store.vfs.readdir(b'', stat=True)): | 430 for p, kind, st in sorted(srcrepo.store.vfs.readdir(b'', stat=True)): |
433 if not _filterstorefile(srcrepo, dstrepo, requirements, p, kind, st): | 431 if not _filterstorefile( |
432 srcrepo, dstrepo, upgrade_op.requirements, p, kind, st | |
433 ): | |
434 continue | 434 continue |
435 | 435 |
436 srcrepo.ui.status(_(b'copying %s\n') % p) | 436 srcrepo.ui.status(_(b'copying %s\n') % p) |
437 src = srcrepo.store.rawvfs.join(p) | 437 src = srcrepo.store.rawvfs.join(p) |
438 dst = dstrepo.store.rawvfs.join(p) | 438 dst = dstrepo.store.rawvfs.join(p) |
487 _( | 487 _( |
488 b'finalizing requirements file and making repository readable ' | 488 b'finalizing requirements file and making repository readable ' |
489 b'again\n' | 489 b'again\n' |
490 ) | 490 ) |
491 ) | 491 ) |
492 scmutil.writereporequirements(srcrepo, requirements) | 492 scmutil.writereporequirements(srcrepo, upgrade_op.requirements) |
493 | 493 |
494 # The lock file from the old store won't be removed because nothing has a | 494 # The lock file from the old store won't be removed because nothing has a |
495 # reference to its new location. So clean it up manually. Alternatively, we | 495 # reference to its new location. So clean it up manually. Alternatively, we |
496 # could update srcrepo.svfs and other variables to point to the new | 496 # could update srcrepo.svfs and other variables to point to the new |
497 # location. This is simpler. | 497 # location. This is simpler. |