diff mercurial/upgrade.py @ 35342:75520786ad2f

upgrade: use the repository 'ui' as the base for the new repository The `repo.baseui` contains all the configuration but the one specific to the repository (so it can be used when dealing with local peer and sub- repository). However, we need the repository config to be taken into account when doing the upgrade. Otherwise, the upgrade related config that exists in the repository config won't be taken into account when performing the update. A buggy and surprising behavior. We had to work around protection set around `repo.ui.copy` since we are an uncommon case.
author Boris Feld <boris.feld@octobus.net>
date Thu, 07 Dec 2017 18:55:35 +0100
parents ead01b74be04
children 06987c6971be
line wrap: on
line diff
--- a/mercurial/upgrade.py	Thu Dec 07 20:50:24 2017 +0100
+++ b/mercurial/upgrade.py	Thu Dec 07 18:55:35 2017 +0100
@@ -830,9 +830,22 @@
         try:
             ui.write(_('creating temporary repository to stage migrated '
                        'data: %s\n') % tmppath)
-            dstrepo = localrepo.localrepository(repo.baseui,
-                                                path=tmppath,
-                                                create=True)
+
+            # repo.ui is protected against copy:
+            #
+            # running `repo.ui.copy` actually call `repo.baseui.copy`. Here, we
+            # -really- wants to copy the actual `repo.ui` object (since we
+            # create a copy of the repository).
+            #
+            # We have to work around the protection.
+            oldcopy = repo.ui.copy
+            try:
+                repo.ui.__dict__.pop('copy', None)
+                dstrepo = localrepo.localrepository(repo.ui,
+                                                    path=tmppath,
+                                                    create=True)
+            finally:
+                repo.ui.copy = oldcopy
 
             with dstrepo.wlock(), dstrepo.lock():
                 backuppath = _upgraderepo(ui, repo, dstrepo, newreqs,