Mercurial > public > mercurial-scm > hg-stable
diff mercurial/upgrade.py @ 42842:a3c2ffcd266f
upgrade: make sure we reclone all revlogs when updating to some format
Adding or removing some requirement (eg: sparserevlog), requires to reclone
revlog to use the new format. We cannot simply copy the original files.
In this case, we issue a warning to proceed with clone every revlogs.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 05 Aug 2019 17:25:24 +0200 |
parents | 908ff446590e |
children | bb6902cbbe23 |
line wrap: on
line diff
--- a/mercurial/upgrade.py Tue Jul 30 17:25:16 2019 +0200 +++ b/mercurial/upgrade.py Mon Aug 05 17:25:24 2019 +0200 @@ -28,6 +28,12 @@ compression, ) +# list of requirements that request a clone of all revlog if added/removed +RECLONES_REQUIREMENTS = { + 'generaldelta', + localrepo.SPARSEREVLOG_REQUIREMENT, +} + def requiredsourcerequirements(repo): """Obtain requirements required to be present to upgrade a repo. @@ -952,6 +958,17 @@ # determineactions could have added optimisation if o not in actions) + removedreqs = repo.requirements - newreqs + addedreqs = newreqs - repo.requirements + + if revlogs != UPGRADE_ALL_REVLOGS: + incompatible = RECLONES_REQUIREMENTS & (removedreqs | addedreqs) + if incompatible: + msg = _('ignoring revlogs selection flags, format requirements ' + 'change: %s\n') + ui.warn(msg % ', '.join(sorted(incompatible))) + revlogs = UPGRADE_ALL_REVLOGS + def printrequirements(): ui.write(_('requirements\n')) ui.write(_(' preserved: %s\n') %