Mercurial > hg
changeset 41089:a59a74721c76
debugupgraderepo: add a --no-backup mode
The process has been around for a while and is pretty safe now. Having an
automated way to clean up the old data is useful when running many different
conversion to compare delta algorithm.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Fri, 21 Dec 2018 13:17:58 +0100 |
parents | 5608b5a6c323 |
children | c8006a25b845 |
files | mercurial/debugcommands.py mercurial/upgrade.py tests/test-completion.t tests/test-upgrade-repo.t |
diffstat | 4 files changed, 51 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/debugcommands.py Fri Jul 13 03:05:30 2018 +0200 +++ b/mercurial/debugcommands.py Fri Dec 21 13:17:58 2018 +0100 @@ -2751,8 +2751,9 @@ @command('debugupgraderepo', [ ('o', 'optimize', [], _('extra optimization to perform'), _('NAME')), ('', 'run', False, _('performs an upgrade')), + ('', 'backup', True, _('keep the old repository content around')), ]) -def debugupgraderepo(ui, repo, run=False, optimize=None): +def debugupgraderepo(ui, repo, run=False, optimize=None, backup=True): """upgrade a repository to use different features If no arguments are specified, the repository is evaluated for upgrade @@ -2771,7 +2772,8 @@ should complete almost instantaneously and the chances of a consumer being unable to access the repository should be low. """ - return upgrade.upgraderepo(ui, repo, run=run, optimize=optimize) + return upgrade.upgraderepo(ui, repo, run=run, optimize=optimize, + backup=backup) @command('debugwalk', cmdutil.walkopts, _('[OPTION]... [FILE]...'), inferrepo=True)
--- a/mercurial/upgrade.py Fri Jul 13 03:05:30 2018 +0200 +++ b/mercurial/upgrade.py Fri Dec 21 13:17:58 2018 +0100 @@ -742,7 +742,7 @@ return backuppath -def upgraderepo(ui, repo, run=False, optimize=None): +def upgraderepo(ui, repo, run=False, optimize=None, backup=True): """Upgrade a repository in place.""" if optimize is None: optimize = [] @@ -899,6 +899,10 @@ with dstrepo.wlock(), dstrepo.lock(): backuppath = _upgraderepo(ui, repo, dstrepo, newreqs, upgradeactions) + if not (backup or backuppath is None): + ui.write(_('removing old repository content%s\n') % backuppath) + repo.vfs.rmtree(backuppath, forcibly=True) + backuppath = None finally: ui.write(_('removing temporary repository %s\n') % tmppath)
--- a/tests/test-completion.t Fri Jul 13 03:05:30 2018 +0200 +++ b/tests/test-completion.t Fri Dec 21 13:17:58 2018 +0100 @@ -299,7 +299,7 @@ debuguigetpass: prompt debuguiprompt: prompt debugupdatecaches: - debugupgraderepo: optimize, run + debugupgraderepo: optimize, run, backup debugwalk: include, exclude debugwhyunstable: debugwireargs: three, four, five, ssh, remotecmd, insecure
--- a/tests/test-upgrade-repo.t Fri Jul 13 03:05:30 2018 +0200 +++ b/tests/test-upgrade-repo.t Fri Dec 21 13:17:58 2018 +0100 @@ -453,6 +453,8 @@ old store should be backed up + $ ls -d .hg/upgradebackup.*/ + .hg/upgradebackup.*/ (glob) $ ls .hg/upgradebackup.*/store 00changelog.i 00manifest.i @@ -464,8 +466,47 @@ undo.backupfiles undo.phaseroots +unless --no-backup is passed + + $ rm -rf .hg/upgradebackup.*/ + $ hg debugupgraderepo --run --no-backup + upgrade will perform the following actions: + + requirements + preserved: dotencode, fncache, generaldelta, revlogv1, store + added: sparserevlog + + sparserevlog + Revlog supports delta chain with more unused data between payload. These gaps will be skipped at read time. This allows for better delta chains, making a better compression and faster exchange with server. + + beginning upgrade... + repository locked and read-only + creating temporary repository to stage migrated data: $TESTTMP/upgradegd/.hg/upgrade.* (glob) + (it is safe to interrupt this process any time before data migration completes) + migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog) + migrating 917 bytes in store; 401 bytes tracked data + migrating 3 filelogs containing 3 revisions (192 bytes in store; 0 bytes tracked data) + finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes + migrating 1 manifests containing 3 revisions (349 bytes in store; 220 bytes tracked data) + finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes + migrating changelog containing 3 revisions (376 bytes in store; 181 bytes tracked data) + finished migrating 3 changelog revisions; change in size: 0 bytes + finished migrating 9 total revisions; total change in store size: 0 bytes + copying phaseroots + data fully migrated to temporary repository + marking source repository as being upgraded; clients will be unable to read from repository + starting in-place swap of repository data + replaced files will be backed up at $TESTTMP/upgradegd/.hg/upgradebackup.* (glob) + replacing store... + store replacement complete; repository was inconsistent for 0.0s + finalizing requirements file and making repository readable again + removing old repository content$TESTTMP/upgradegd/.hg/upgradebackup.* (glob) + removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob) + $ ls -1 .hg/ | grep upgradebackup + [1] $ cd .. + store files with special filenames aren't encoded during copy $ hg init store-filenames