diff mercurial/upgrade.py @ 42830:cf2b765cecd7

upgrade: add an argument to control manifest upgrade The argument can be used to only "clone" manifest revlog or clone all of them but this one. The selection will make more sense once we have a `--changelog` flag in the next changesets.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 30 Jul 2019 00:35:52 +0200
parents 0812d9fb63fe
children 908ff446590e
line wrap: on
line diff
--- a/mercurial/upgrade.py	Fri Aug 30 18:11:41 2019 +0200
+++ b/mercurial/upgrade.py	Tue Jul 30 00:35:52 2019 +0200
@@ -864,13 +864,31 @@
 
     return backuppath
 
-def upgraderepo(ui, repo, run=False, optimize=None, backup=True):
+def upgraderepo(ui, repo, run=False, optimize=None, backup=True,
+                manifest=None):
     """Upgrade a repository in place."""
     if optimize is None:
         optimize = []
     optimize = set(legacy_opts_map.get(o, o) for o in optimize)
     repo = repo.unfiltered()
 
+    revlogs = set(UPGRADE_ALL_REVLOGS)
+    specentries = (('m', manifest),)
+    specified = [(y, x) for (y, x) in specentries if x is not None]
+    if specified:
+        # we have some limitation on revlogs to be recloned
+        if any(x for y, x in specified):
+            revlogs = set()
+            for r, enabled in specified:
+                if enabled:
+                    if r == 'm':
+                        revlogs.add(UPGRADE_MANIFEST)
+        else:
+            # none are enabled
+            for r, __ in specified:
+                if r == 'm':
+                    revlogs.discard(UPGRADE_MANIFEST)
+
     # Ensure the repository can be upgraded.
     missingreqs = requiredsourcerequirements(repo) - repo.requirements
     if missingreqs:
@@ -1020,7 +1038,7 @@
 
             with dstrepo.wlock(), dstrepo.lock():
                 backuppath = _upgraderepo(ui, repo, dstrepo, newreqs,
-                                          upgradeactions)
+                                          upgradeactions, revlogs=revlogs)
             if not (backup or backuppath is None):
                 ui.write(_('removing old repository content%s\n') % backuppath)
                 repo.vfs.rmtree(backuppath, forcibly=True)