largefiles: allow to run 'debugupgraderepo' on repo with largefiles
authorBoris Feld <boris.feld@octobus.net>
Thu, 07 Dec 2017 01:53:14 +0100
changeset 35303 67b7e39b441b
parent 35302 ad2b35ebf670
child 35304 f77121b6bf1b
largefiles: allow to run 'debugupgraderepo' on repo with largefiles The extensions wrap the necessary function to ensure the 'largefiles' requirements won't be dropped. It is now possible to run `hg debugupgraderepo` on a repository with largefiles.
hgext/largefiles/overrides.py
hgext/largefiles/uisetup.py
tests/test-upgrade-repo.t
--- a/hgext/largefiles/overrides.py	Thu Dec 07 01:51:54 2017 +0100
+++ b/hgext/largefiles/overrides.py	Thu Dec 07 01:53:14 2017 +0100
@@ -1470,3 +1470,9 @@
                                 printmessage=False, normallookup=True)
 
     return result
+
+def upgraderequirements(orig, repo):
+    reqs = orig(repo)
+    if 'largefiles' in repo.requirements:
+        reqs.add('largefiles')
+    return reqs
--- a/hgext/largefiles/uisetup.py	Thu Dec 07 01:51:54 2017 +0100
+++ b/hgext/largefiles/uisetup.py	Thu Dec 07 01:53:14 2017 +0100
@@ -30,6 +30,7 @@
     scmutil,
     sshpeer,
     subrepo,
+    upgrade,
     wireproto,
 )
 
@@ -60,6 +61,12 @@
 
     extensions.wrapfunction(copies, 'pathcopies', overrides.copiespathcopies)
 
+    extensions.wrapfunction(upgrade, 'preservedrequirements',
+                            overrides.upgraderequirements)
+
+    extensions.wrapfunction(upgrade, 'supporteddestrequirements',
+                            overrides.upgraderequirements)
+
     # Subrepos call status function
     entry = extensions.wrapcommand(commands.table, 'status',
                                    overrides.overridestatus)
--- a/tests/test-upgrade-repo.t	Thu Dec 07 01:51:54 2017 +0100
+++ b/tests/test-upgrade-repo.t	Thu Dec 07 01:53:14 2017 +0100
@@ -352,3 +352,62 @@
   the old repository will not be deleted; remove it to free up disk space once the upgraded repository is verified
 
   $ cd ..
+
+Check upgrading a large file repository
+---------------------------------------
+
+  $ hg init largefilesrepo
+  $ cat << EOF >> largefilesrepo/.hg/hgrc
+  > [extensions]
+  > largefiles =
+  > EOF
+
+  $ cd largefilesrepo
+  $ touch foo
+  $ hg add --large foo
+  $ hg -q commit -m initial
+  $ cat .hg/requires
+  dotencode
+  fncache
+  generaldelta
+  largefiles
+  revlogv1
+  store
+
+  $ hg debugupgraderepo --run
+  upgrade will perform the following actions:
+  
+  requirements
+     preserved: dotencode, fncache, generaldelta, largefiles, revlogv1, store
+  
+  beginning upgrade...
+  repository locked and read-only
+  creating temporary repository to stage migrated data: $TESTTMP/largefilesrepo/.hg/upgrade.* (glob)
+  (it is safe to interrupt this process any time before data migration completes)
+  migrating 3 total revisions (1 in filelogs, 1 in manifests, 1 in changelog)
+  migrating 163 bytes in store; 160 bytes tracked data
+  migrating 1 filelogs containing 1 revisions (42 bytes in store; 41 bytes tracked data)
+  finished migrating 1 filelog revisions across 1 filelogs; change in size: 0 bytes
+  migrating 1 manifests containing 1 revisions (52 bytes in store; 51 bytes tracked data)
+  finished migrating 1 manifest revisions across 1 manifests; change in size: 0 bytes
+  migrating changelog containing 1 revisions (69 bytes in store; 68 bytes tracked data)
+  finished migrating 1 changelog revisions; change in size: 0 bytes
+  finished migrating 3 total revisions; total change in store size: 0 bytes
+  copying phaseroots
+  data fully migrated to temporary repository
+  marking source repository as being upgraded; clients will be unable to read from repository
+  starting in-place swap of repository data
+  replaced files will be backed up at $TESTTMP/largefilesrepo/.hg/upgradebackup.* (glob)
+  replacing store...
+  store replacement complete; repository was inconsistent for 0.0s
+  finalizing requirements file and making repository readable again
+  removing temporary repository $TESTTMP/largefilesrepo/.hg/upgrade.* (glob)
+  copy of old repository backed up at $TESTTMP/largefilesrepo/.hg/upgradebackup.* (glob)
+  the old repository will not be deleted; remove it to free up disk space once the upgraded repository is verified
+  $ cat .hg/requires
+  dotencode
+  fncache
+  generaldelta
+  largefiles
+  revlogv1
+  store