test-upgrade-repo.t
346 lines
| 14.8 KiB
| text/troff
|
Tads3Lexer
/ tests / test-upgrade-repo.t
|
r30775 | $ 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 | ||||
|
r30774 | [255] | ||
|
r30775 | |||
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] | ||||
|
r30776 | |||
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 | ||||
|
r30777 | $ 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) | ||||
|
r30779 | (it is safe to interrupt this process any time before data migration completes) | ||
data fully migrated to temporary repository | ||||
|
r30777 | 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) | ||||
|
r30779 | replacing store... | ||
store replacement complete; repository was inconsistent for *s (glob) | ||||
|
r30777 | 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) | ||||
|
r30779 | (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 | ||||
|
r30780 | copying phaseroots | ||
|
r30779 | data fully migrated to temporary repository | ||
|
r30777 | 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) | ||||
|
r30779 | replacing store... | ||
store replacement complete; repository was inconsistent for *s (glob) | ||||
|
r30777 | 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 | ||||
|
r30779 | store directory has files we expect | ||
$ ls .hg/store | ||||
00changelog.i | ||||
00manifest.i | ||||
data | ||||
fncache | ||||
|
r30780 | phaseroots | ||
|
r30779 | 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 | ||||
|
r30777 | $ cd .. | ||
|
r31798 | |||
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 | ||||
removing temporary repository $TESTTMP/store-filenames/.hg/upgrade.* (glob) | ||||
abort: No such file or directory: $TESTTMP/store-filenames/.hg/store/~2e_x_x__special__filename | ||||
[255] | ||||
$ cd .. | ||||