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.
--- 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