diff -r 908ff446590e -r a3c2ffcd266f mercurial/upgrade.py --- 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') %