mercurial/upgrade.py
changeset 42832 a3c2ffcd266f
parent 42831 908ff446590e
child 42999 bb6902cbbe23
--- 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') %