|
|
$ cat >> $HGRCPATH << EOF
|
|
|
> [extensions]
|
|
|
> share =
|
|
|
> EOF
|
|
|
|
|
|
store and revlogv1 are required in source
|
|
|
|
|
|
$ hg --config format.usestore=false init no-store
|
|
|
$ hg -R no-store debugupgraderepo
|
|
|
abort: cannot upgrade repository; requirement missing: store
|
|
|
[255]
|
|
|
|
|
|
$ hg init no-revlogv1
|
|
|
$ cat > no-revlogv1/.hg/requires << EOF
|
|
|
> dotencode
|
|
|
> fncache
|
|
|
> generaldelta
|
|
|
> store
|
|
|
> EOF
|
|
|
|
|
|
$ hg -R no-revlogv1 debugupgraderepo
|
|
|
abort: cannot upgrade repository; requirement missing: revlogv1
|
|
|
[255]
|
|
|
|
|
|
Cannot upgrade shared repositories
|
|
|
|
|
|
$ hg init share-parent
|
|
|
$ hg -q share share-parent share-child
|
|
|
|
|
|
$ hg -R share-child debugupgraderepo
|
|
|
abort: cannot upgrade repository; unsupported source requirement: shared
|
|
|
[255]
|
|
|
|
|
|
Do not yet support upgrading manifestv2 and treemanifest repos
|
|
|
|
|
|
$ hg --config experimental.manifestv2=true init manifestv2
|
|
|
$ hg -R manifestv2 debugupgraderepo
|
|
|
abort: cannot upgrade repository; unsupported source requirement: manifestv2
|
|
|
[255]
|
|
|
|
|
|
$ hg --config experimental.treemanifest=true init treemanifest
|
|
|
$ hg -R treemanifest debugupgraderepo
|
|
|
abort: cannot upgrade repository; unsupported source requirement: treemanifest
|
|
|
[255]
|
|
|
|
|
|
Cannot add manifestv2 or treemanifest requirement during upgrade
|
|
|
|
|
|
$ hg init disallowaddedreq
|
|
|
$ hg -R disallowaddedreq --config experimental.manifestv2=true --config experimental.treemanifest=true debugupgraderepo
|
|
|
abort: cannot upgrade repository; do not support adding requirement: manifestv2, treemanifest
|
|
|
[255]
|
|
|
|
|
|
An upgrade of a repository created with recommended settings only suggests optimizations
|
|
|
|
|
|
$ hg init empty
|
|
|
$ cd empty
|
|
|
$ hg debugupgraderepo
|
|
|
(no feature deficiencies found in existing repository)
|
|
|
performing an upgrade with "--run" will make the following changes:
|
|
|
|
|
|
requirements
|
|
|
preserved: dotencode, fncache, generaldelta, revlogv1, store
|
|
|
|
|
|
additional optimizations are available by specifying "--optimize <name>":
|
|
|
|
|
|
redeltaparent
|
|
|
deltas within internal storage will be recalculated to choose an optimal base revision where this was not already done; the size of the repository may shrink and various operations may become faster; the first time this optimization is performed could slow down upgrade execution considerably; subsequent invocations should not run noticeably slower
|
|
|
|
|
|
redeltamultibase
|
|
|
deltas within internal storage will be recalculated against multiple base revision and the smallest difference will be used; the size of the repository may shrink significantly when there are many merges; this optimization will slow down execution in proportion to the number of merges in the repository and the amount of files in the repository; this slow down should not be significant unless there are tens of thousands of files and thousands of merges
|
|
|
|
|
|
redeltaall
|
|
|
deltas within internal storage will always be recalculated without reusing prior deltas; this will likely make execution run several times slower; this optimization is typically not needed
|
|
|
|
|
|
|
|
|
--optimize can be used to add optimizations
|
|
|
|
|
|
$ hg debugupgrade --optimize redeltaparent
|
|
|
(no feature deficiencies found in existing repository)
|
|
|
performing an upgrade with "--run" will make the following changes:
|
|
|
|
|
|
requirements
|
|
|
preserved: dotencode, fncache, generaldelta, revlogv1, store
|
|
|
|
|
|
redeltaparent
|
|
|
deltas within internal storage will choose a new base revision if needed
|
|
|
|
|
|
additional optimizations are available by specifying "--optimize <name>":
|
|
|
|
|
|
redeltamultibase
|
|
|
deltas within internal storage will be recalculated against multiple base revision and the smallest difference will be used; the size of the repository may shrink significantly when there are many merges; this optimization will slow down execution in proportion to the number of merges in the repository and the amount of files in the repository; this slow down should not be significant unless there are tens of thousands of files and thousands of merges
|
|
|
|
|
|
redeltaall
|
|
|
deltas within internal storage will always be recalculated without reusing prior deltas; this will likely make execution run several times slower; this optimization is typically not needed
|
|
|
|
|
|
|
|
|
Various sub-optimal detections work
|
|
|
|
|
|
$ cat > .hg/requires << EOF
|
|
|
> revlogv1
|
|
|
> store
|
|
|
> EOF
|
|
|
|
|
|
$ hg debugupgraderepo
|
|
|
repository lacks features recommended by current config options:
|
|
|
|
|
|
fncache
|
|
|
long and reserved filenames may not work correctly; repository performance is sub-optimal
|
|
|
|
|
|
dotencode
|
|
|
storage of filenames beginning with a period or space may not work correctly
|
|
|
|
|
|
generaldelta
|
|
|
deltas within internal storage are unable to choose optimal revisions; repository is larger and slower than it could be; interaction with other repositories may require extra network and CPU resources, making "hg push" and "hg pull" slower
|
|
|
|
|
|
|
|
|
performing an upgrade with "--run" will make the following changes:
|
|
|
|
|
|
requirements
|
|
|
preserved: revlogv1, store
|
|
|
added: dotencode, fncache, generaldelta
|
|
|
|
|
|
fncache
|
|
|
repository will be more resilient to storing certain paths and performance of certain operations should be improved
|
|
|
|
|
|
dotencode
|
|
|
repository will be better able to store files beginning with a space or period
|
|
|
|
|
|
generaldelta
|
|
|
repository storage will be able to create optimal deltas; new repository data will be smaller and read times should decrease; interacting with other repositories using this storage model should require less network and CPU resources, making "hg push" and "hg pull" faster
|
|
|
|
|
|
additional optimizations are available by specifying "--optimize <name>":
|
|
|
|
|
|
redeltaparent
|
|
|
deltas within internal storage will be recalculated to choose an optimal base revision where this was not already done; the size of the repository may shrink and various operations may become faster; the first time this optimization is performed could slow down upgrade execution considerably; subsequent invocations should not run noticeably slower
|
|
|
|
|
|
redeltamultibase
|
|
|
deltas within internal storage will be recalculated against multiple base revision and the smallest difference will be used; the size of the repository may shrink significantly when there are many merges; this optimization will slow down execution in proportion to the number of merges in the repository and the amount of files in the repository; this slow down should not be significant unless there are tens of thousands of files and thousands of merges
|
|
|
|
|
|
redeltaall
|
|
|
deltas within internal storage will always be recalculated without reusing prior deltas; this will likely make execution run several times slower; this optimization is typically not needed
|
|
|
|
|
|
|
|
|
$ hg --config format.dotencode=false debugupgraderepo
|
|
|
repository lacks features recommended by current config options:
|
|
|
|
|
|
fncache
|
|
|
long and reserved filenames may not work correctly; repository performance is sub-optimal
|
|
|
|
|
|
generaldelta
|
|
|
deltas within internal storage are unable to choose optimal revisions; repository is larger and slower than it could be; interaction with other repositories may require extra network and CPU resources, making "hg push" and "hg pull" slower
|
|
|
|
|
|
repository lacks features used by the default config options:
|
|
|
|
|
|
dotencode
|
|
|
storage of filenames beginning with a period or space may not work correctly
|
|
|
|
|
|
|
|
|
performing an upgrade with "--run" will make the following changes:
|
|
|
|
|
|
requirements
|
|
|
preserved: revlogv1, store
|
|
|
added: fncache, generaldelta
|
|
|
|
|
|
fncache
|
|
|
repository will be more resilient to storing certain paths and performance of certain operations should be improved
|
|
|
|
|
|
generaldelta
|
|
|
repository storage will be able to create optimal deltas; new repository data will be smaller and read times should decrease; interacting with other repositories using this storage model should require less network and CPU resources, making "hg push" and "hg pull" faster
|
|
|
|
|
|
additional optimizations are available by specifying "--optimize <name>":
|
|
|
|
|
|
redeltaparent
|
|
|
deltas within internal storage will be recalculated to choose an optimal base revision where this was not already done; the size of the repository may shrink and various operations may become faster; the first time this optimization is performed could slow down upgrade execution considerably; subsequent invocations should not run noticeably slower
|
|
|
|
|
|
redeltamultibase
|
|
|
deltas within internal storage will be recalculated against multiple base revision and the smallest difference will be used; the size of the repository may shrink significantly when there are many merges; this optimization will slow down execution in proportion to the number of merges in the repository and the amount of files in the repository; this slow down should not be significant unless there are tens of thousands of files and thousands of merges
|
|
|
|
|
|
redeltaall
|
|
|
deltas within internal storage will always be recalculated without reusing prior deltas; this will likely make execution run several times slower; this optimization is typically not needed
|
|
|
|
|
|
|
|
|
$ cd ..
|
|
|
|
|
|
Upgrading a repository that is already modern essentially no-ops
|
|
|
|
|
|
$ hg init modern
|
|
|
$ hg -R modern debugupgraderepo --run
|
|
|
upgrade will perform the following actions:
|
|
|
|
|
|
requirements
|
|
|
preserved: dotencode, fncache, generaldelta, revlogv1, store
|
|
|
|
|
|
beginning upgrade...
|
|
|
repository locked and read-only
|
|
|
creating temporary repository to stage migrated data: $TESTTMP/modern/.hg/upgrade.* (glob)
|
|
|
(it is safe to interrupt this process any time before data migration completes)
|
|
|
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/modern/.hg/upgradebackup.* (glob)
|
|
|
replacing store...
|
|
|
store replacement complete; repository was inconsistent for *s (glob)
|
|
|
finalizing requirements file and making repository readable again
|
|
|
removing temporary repository $TESTTMP/modern/.hg/upgrade.* (glob)
|
|
|
copy of old repository backed up at $TESTTMP/modern/.hg/upgradebackup.* (glob)
|
|
|
the old repository will not be deleted; remove it to free up disk space once the upgraded repository is verified
|
|
|
|
|
|
Upgrading a repository to generaldelta works
|
|
|
|
|
|
$ hg --config format.usegeneraldelta=false init upgradegd
|
|
|
$ cd upgradegd
|
|
|
$ touch f0
|
|
|
$ hg -q commit -A -m initial
|
|
|
$ touch f1
|
|
|
$ hg -q commit -A -m 'add f1'
|
|
|
$ hg -q up -r 0
|
|
|
$ touch f2
|
|
|
$ hg -q commit -A -m 'add f2'
|
|
|
|
|
|
$ hg debugupgraderepo --run
|
|
|
upgrade will perform the following actions:
|
|
|
|
|
|
requirements
|
|
|
preserved: dotencode, fncache, revlogv1, store
|
|
|
added: generaldelta
|
|
|
|
|
|
generaldelta
|
|
|
repository storage will be able to create optimal deltas; new repository data will be smaller and read times should decrease; interacting with other repositories using this storage model should require less network and CPU resources, making "hg push" and "hg pull" faster
|
|
|
|
|
|
beginning upgrade...
|
|
|
repository locked and read-only
|
|
|
creating temporary repository to stage migrated data: $TESTTMP/upgradegd/.hg/upgrade.* (glob)
|
|
|
(it is safe to interrupt this process any time before data migration completes)
|
|
|
migrating 9 total revisions (3 in filelogs, 3 in manifests, 3 in changelog)
|
|
|
migrating 341 bytes in store; 401 bytes tracked data
|
|
|
migrating 3 filelogs containing 3 revisions (0 bytes in store; 0 bytes tracked data)
|
|
|
finished migrating 3 filelog revisions across 3 filelogs; change in size: 0 bytes
|
|
|
migrating 1 manifests containing 3 revisions (157 bytes in store; 220 bytes tracked data)
|
|
|
finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes
|
|
|
migrating changelog containing 3 revisions (184 bytes in store; 181 bytes tracked data)
|
|
|
finished migrating 3 changelog revisions; change in size: 0 bytes
|
|
|
finished migrating 9 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/upgradegd/.hg/upgradebackup.* (glob)
|
|
|
replacing store...
|
|
|
store replacement complete; repository was inconsistent for *s (glob)
|
|
|
finalizing requirements file and making repository readable again
|
|
|
removing temporary repository $TESTTMP/upgradegd/.hg/upgrade.* (glob)
|
|
|
copy of old repository backed up at $TESTTMP/upgradegd/.hg/upgradebackup.* (glob)
|
|
|
the old repository will not be deleted; remove it to free up disk space once the upgraded repository is verified
|
|
|
|
|
|
Original requirements backed up
|
|
|
|
|
|
$ cat .hg/upgradebackup.*/requires
|
|
|
dotencode
|
|
|
fncache
|
|
|
revlogv1
|
|
|
store
|
|
|
|
|
|
generaldelta added to original requirements files
|
|
|
|
|
|
$ cat .hg/requires
|
|
|
dotencode
|
|
|
fncache
|
|
|
generaldelta
|
|
|
revlogv1
|
|
|
store
|
|
|
|
|
|
store directory has files we expect
|
|
|
|
|
|
$ ls .hg/store
|
|
|
00changelog.i
|
|
|
00manifest.i
|
|
|
data
|
|
|
fncache
|
|
|
phaseroots
|
|
|
undo
|
|
|
undo.backupfiles
|
|
|
undo.phaseroots
|
|
|
|
|
|
manifest should be generaldelta
|
|
|
|
|
|
$ hg debugrevlog -m | grep flags
|
|
|
flags : inline, generaldelta
|
|
|
|
|
|
verify should be happy
|
|
|
|
|
|
$ hg verify
|
|
|
checking changesets
|
|
|
checking manifests
|
|
|
crosschecking files in changesets and manifests
|
|
|
checking files
|
|
|
3 files, 3 changesets, 3 total revisions
|
|
|
|
|
|
old store should be backed up
|
|
|
|
|
|
$ ls .hg/upgradebackup.*/store
|
|
|
00changelog.i
|
|
|
00manifest.i
|
|
|
data
|
|
|
fncache
|
|
|
phaseroots
|
|
|
undo
|
|
|
undo.backup.fncache
|
|
|
undo.backupfiles
|
|
|
undo.phaseroots
|
|
|
|
|
|
$ cd ..
|
|
|
|
|
|
store files with special filenames aren't encoded during copy
|
|
|
|
|
|
$ hg init store-filenames
|
|
|
$ cd store-filenames
|
|
|
$ touch foo
|
|
|
$ hg -q commit -A -m initial
|
|
|
$ touch .hg/store/.XX_special_filename
|
|
|
|
|
|
$ hg debugupgraderepo --run
|
|
|
upgrade will perform the following actions:
|
|
|
|
|
|
requirements
|
|
|
preserved: dotencode, fncache, generaldelta, revlogv1, store
|
|
|
|
|
|
beginning upgrade...
|
|
|
repository locked and read-only
|
|
|
creating temporary repository to stage migrated data: $TESTTMP/store-filenames/.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 109 bytes in store; 107 bytes tracked data
|
|
|
migrating 1 filelogs containing 1 revisions (0 bytes in store; 0 bytes tracked data)
|
|
|
finished migrating 1 filelog revisions across 1 filelogs; change in size: 0 bytes
|
|
|
migrating 1 manifests containing 1 revisions (46 bytes in store; 45 bytes tracked data)
|
|
|
finished migrating 1 manifest revisions across 1 manifests; change in size: 0 bytes
|
|
|
migrating changelog containing 1 revisions (63 bytes in store; 62 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 .XX_special_filename
|
|
|
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/store-filenames/.hg/upgradebackup.* (glob)
|
|
|
replacing store...
|
|
|
store replacement complete; repository was inconsistent for *s (glob)
|
|
|
finalizing requirements file and making repository readable again
|
|
|
removing temporary repository $TESTTMP/store-filenames/.hg/upgrade.* (glob)
|
|
|
copy of old repository backed up at $TESTTMP/store-filenames/.hg/upgradebackup.* (glob)
|
|
|
the old repository will not be deleted; remove it to free up disk space once the upgraded repository is verified
|
|
|
|
|
|
$ cd ..
|
|
|
|