test-upgrade-repo.t
697 lines
| 30.1 KiB
| text/troff
|
Tads3Lexer
/ tests / test-upgrade-repo.t
Gregory Szorc
|
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 | ||||
Gregory Szorc
|
r30774 | [255] | ||
Gregory Szorc
|
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] | ||||
Augie Fackler
|
r36391 | Do not yet support upgrading treemanifest repos | ||
Gregory Szorc
|
r30775 | |||
$ hg --config experimental.treemanifest=true init treemanifest | ||||
$ hg -R treemanifest debugupgraderepo | ||||
abort: cannot upgrade repository; unsupported source requirement: treemanifest | ||||
[255] | ||||
Augie Fackler
|
r36391 | Cannot add treemanifest requirement during upgrade | ||
Gregory Szorc
|
r30775 | |||
$ hg init disallowaddedreq | ||||
Augie Fackler
|
r36391 | $ hg -R disallowaddedreq --config experimental.treemanifest=true debugupgraderepo | ||
abort: cannot upgrade repository; do not support adding requirement: treemanifest | ||||
Gregory Szorc
|
r30775 | [255] | ||
Gregory Szorc
|
r30776 | |||
An upgrade of a repository created with recommended settings only suggests optimizations | ||||
$ hg init empty | ||||
$ cd empty | ||||
Boris Feld
|
r35337 | $ hg debugformat | ||
format-variant repo | ||||
fncache: yes | ||||
dotencode: yes | ||||
generaldelta: yes | ||||
plain-cl-delta: yes | ||||
Boris Feld
|
r35341 | compression: zlib | ||
Boris Feld
|
r35338 | $ hg debugformat --verbose | ||
format-variant repo config default | ||||
fncache: yes yes yes | ||||
dotencode: yes yes yes | ||||
generaldelta: yes yes yes | ||||
plain-cl-delta: yes yes yes | ||||
Boris Feld
|
r35341 | compression: zlib zlib zlib | ||
Boris Feld
|
r35338 | $ hg debugformat --verbose --config format.usegfncache=no | ||
format-variant repo config default | ||||
fncache: yes yes yes | ||||
dotencode: yes yes yes | ||||
generaldelta: yes yes yes | ||||
plain-cl-delta: yes yes yes | ||||
Boris Feld
|
r35341 | compression: zlib zlib zlib | ||
Boris Feld
|
r35339 | $ hg debugformat --verbose --config format.usegfncache=no --color=debug | ||
format-variant repo config default | ||||
[formatvariant.name.uptodate|fncache: ][formatvariant.repo.uptodate| yes][formatvariant.config.default| yes][formatvariant.default| yes] | ||||
[formatvariant.name.uptodate|dotencode: ][formatvariant.repo.uptodate| yes][formatvariant.config.default| yes][formatvariant.default| yes] | ||||
[formatvariant.name.uptodate|generaldelta: ][formatvariant.repo.uptodate| yes][formatvariant.config.default| yes][formatvariant.default| yes] | ||||
[formatvariant.name.uptodate|plain-cl-delta:][formatvariant.repo.uptodate| yes][formatvariant.config.default| yes][formatvariant.default| yes] | ||||
Boris Feld
|
r35341 | [formatvariant.name.uptodate|compression: ][formatvariant.repo.uptodate| zlib][formatvariant.config.default| zlib][formatvariant.default| zlib] | ||
Yuya Nishihara
|
r35378 | $ hg debugformat -Tjson | ||
[ | ||||
{ | ||||
Yuya Nishihara
|
r35379 | "config": true, | ||
"default": true, | ||||
Yuya Nishihara
|
r35378 | "name": "fncache", | ||
Yuya Nishihara
|
r35379 | "repo": true | ||
Yuya Nishihara
|
r35378 | }, | ||
{ | ||||
Yuya Nishihara
|
r35379 | "config": true, | ||
"default": true, | ||||
Yuya Nishihara
|
r35378 | "name": "dotencode", | ||
Yuya Nishihara
|
r35379 | "repo": true | ||
Yuya Nishihara
|
r35378 | }, | ||
{ | ||||
Yuya Nishihara
|
r35379 | "config": true, | ||
"default": true, | ||||
Yuya Nishihara
|
r35378 | "name": "generaldelta", | ||
Yuya Nishihara
|
r35379 | "repo": true | ||
Yuya Nishihara
|
r35378 | }, | ||
{ | ||||
Yuya Nishihara
|
r35379 | "config": true, | ||
"default": true, | ||||
Yuya Nishihara
|
r35378 | "name": "plain-cl-delta", | ||
Yuya Nishihara
|
r35379 | "repo": true | ||
Yuya Nishihara
|
r35378 | }, | ||
{ | ||||
"config": "zlib", | ||||
"default": "zlib", | ||||
"name": "compression", | ||||
"repo": "zlib" | ||||
} | ||||
] | ||||
Gregory Szorc
|
r30776 | $ 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 | ||||
Boris Feld
|
r35346 | redeltafulladd | ||
every revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "redeltaall" but even slower since more logic is involved. | ||||
Gregory Szorc
|
r30776 | |||
--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 | ||||
Boris Feld
|
r35346 | redeltafulladd | ||
every revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "redeltaall" but even slower since more logic is involved. | ||||
Gregory Szorc
|
r30776 | |||
Various sub-optimal detections work | ||||
$ cat > .hg/requires << EOF | ||||
> revlogv1 | ||||
> store | ||||
> EOF | ||||
Boris Feld
|
r35337 | $ hg debugformat | ||
format-variant repo | ||||
fncache: no | ||||
dotencode: no | ||||
generaldelta: no | ||||
plain-cl-delta: yes | ||||
Boris Feld
|
r35341 | compression: zlib | ||
Boris Feld
|
r35338 | $ hg debugformat --verbose | ||
format-variant repo config default | ||||
fncache: no yes yes | ||||
dotencode: no yes yes | ||||
generaldelta: no yes yes | ||||
plain-cl-delta: yes yes yes | ||||
Boris Feld
|
r35341 | compression: zlib zlib zlib | ||
Boris Feld
|
r35338 | $ hg debugformat --verbose --config format.usegeneraldelta=no | ||
format-variant repo config default | ||||
fncache: no yes yes | ||||
dotencode: no yes yes | ||||
generaldelta: no no yes | ||||
plain-cl-delta: yes yes yes | ||||
Boris Feld
|
r35341 | compression: zlib zlib zlib | ||
Boris Feld
|
r35339 | $ hg debugformat --verbose --config format.usegeneraldelta=no --color=debug | ||
format-variant repo config default | ||||
[formatvariant.name.mismatchconfig|fncache: ][formatvariant.repo.mismatchconfig| no][formatvariant.config.default| yes][formatvariant.default| yes] | ||||
[formatvariant.name.mismatchconfig|dotencode: ][formatvariant.repo.mismatchconfig| no][formatvariant.config.default| yes][formatvariant.default| yes] | ||||
[formatvariant.name.mismatchdefault|generaldelta: ][formatvariant.repo.mismatchdefault| no][formatvariant.config.special| no][formatvariant.default| yes] | ||||
[formatvariant.name.uptodate|plain-cl-delta:][formatvariant.repo.uptodate| yes][formatvariant.config.default| yes][formatvariant.default| yes] | ||||
Boris Feld
|
r35341 | [formatvariant.name.uptodate|compression: ][formatvariant.repo.uptodate| zlib][formatvariant.config.default| zlib][formatvariant.default| zlib] | ||
Gregory Szorc
|
r30776 | $ 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 | ||||
Boris Feld
|
r35346 | redeltafulladd | ||
every revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "redeltaall" but even slower since more logic is involved. | ||||
Gregory Szorc
|
r30776 | |||
$ 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 | ||||
Boris Feld
|
r35346 | redeltafulladd | ||
every revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "redeltaall" but even slower since more logic is involved. | ||||
Gregory Szorc
|
r30776 | |||
Gregory Szorc
|
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) | ||||
Gregory Szorc
|
r30779 | (it is safe to interrupt this process any time before data migration completes) | ||
data fully migrated to temporary repository | ||||
Gregory Szorc
|
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) | ||||
Gregory Szorc
|
r30779 | replacing store... | ||
store replacement complete; repository was inconsistent for *s (glob) | ||||
Gregory Szorc
|
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) | ||||
Gregory Szorc
|
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 | ||||
Gregory Szorc
|
r30780 | copying phaseroots | ||
Gregory Szorc
|
r30779 | data fully migrated to temporary repository | ||
Gregory Szorc
|
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) | ||||
Gregory Szorc
|
r30779 | replacing store... | ||
store replacement complete; repository was inconsistent for *s (glob) | ||||
Gregory Szorc
|
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 | ||||
Gregory Szorc
|
r30779 | store directory has files we expect | ||
$ ls .hg/store | ||||
00changelog.i | ||||
00manifest.i | ||||
data | ||||
fncache | ||||
Gregory Szorc
|
r30780 | phaseroots | ||
Gregory Szorc
|
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 | ||||
Gregory Szorc
|
r30777 | $ cd .. | ||
Gregory Szorc
|
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 | ||||
Gregory Szorc
|
r31799 | 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 | ||||
Gregory Szorc
|
r31798 | removing temporary repository $TESTTMP/store-filenames/.hg/upgrade.* (glob) | ||
Gregory Szorc
|
r31799 | 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 | ||||
Boris Feld
|
r35346 | $ hg debugupgraderepo --run --optimize redeltafulladd | ||
upgrade will perform the following actions: | ||||
requirements | ||||
preserved: dotencode, fncache, generaldelta, revlogv1, store | ||||
redeltafulladd | ||||
each revision will be added as new content to the internal storage; this will likely drastically slow down execution time, but some extensions might need it | ||||
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... | ||||
Matt Harbison
|
r35361 | store replacement complete; repository was inconsistent for *s (glob) | ||
Boris Feld
|
r35346 | 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 | ||||
Gregory Szorc
|
r31798 | |||
$ cd .. | ||||
Boris Feld
|
r35304 | |||
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... | ||||
Matt Harbison
|
r35361 | store replacement complete; repository was inconsistent for *s (glob) | ||
Boris Feld
|
r35304 | 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 | ||||
Boris Feld
|
r35342 | |||
Matt Harbison
|
r35362 | $ cat << EOF >> .hg/hgrc | ||
> [extensions] | ||||
> lfs = | ||||
> [lfs] | ||||
> threshold = 10 | ||||
> EOF | ||||
$ echo '123456789012345' > lfs.bin | ||||
$ hg ci -Am 'lfs.bin' | ||||
adding lfs.bin | ||||
$ grep lfs .hg/requires | ||||
lfs | ||||
$ find .hg/store/lfs -type f | ||||
.hg/store/lfs/objects/d0/beab232adff5ba365880366ad30b1edb85c4c5372442b5d2fe27adc96d653f | ||||
$ hg debugupgraderepo --run | ||||
upgrade will perform the following actions: | ||||
requirements | ||||
preserved: dotencode, fncache, generaldelta, largefiles, lfs, 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 6 total revisions (2 in filelogs, 2 in manifests, 2 in changelog) | ||||
migrating 417 bytes in store; 467 bytes tracked data | ||||
migrating 2 filelogs containing 2 revisions (168 bytes in store; 182 bytes tracked data) | ||||
finished migrating 2 filelog revisions across 2 filelogs; change in size: 0 bytes | ||||
migrating 1 manifests containing 2 revisions (113 bytes in store; 151 bytes tracked data) | ||||
finished migrating 2 manifest revisions across 1 manifests; change in size: 0 bytes | ||||
migrating changelog containing 2 revisions (136 bytes in store; 134 bytes tracked data) | ||||
finished migrating 2 changelog revisions; change in size: 0 bytes | ||||
finished migrating 6 total revisions; total change in store size: 0 bytes | ||||
copying phaseroots | ||||
Matt Harbison
|
r35364 | copying lfs blob d0beab232adff5ba365880366ad30b1edb85c4c5372442b5d2fe27adc96d653f | ||
Matt Harbison
|
r35362 | 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 *s (glob) | ||||
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 | ||||
$ grep lfs .hg/requires | ||||
lfs | ||||
$ find .hg/store/lfs -type f | ||||
Matt Harbison
|
r35364 | .hg/store/lfs/objects/d0/beab232adff5ba365880366ad30b1edb85c4c5372442b5d2fe27adc96d653f | ||
Matt Harbison
|
r35362 | $ hg verify | ||
checking changesets | ||||
checking manifests | ||||
crosschecking files in changesets and manifests | ||||
checking files | ||||
2 files, 2 changesets, 2 total revisions | ||||
$ hg debugdata lfs.bin 0 | ||||
version https://git-lfs.github.com/spec/v1 | ||||
oid sha256:d0beab232adff5ba365880366ad30b1edb85c4c5372442b5d2fe27adc96d653f | ||||
size 16 | ||||
x-is-binary 0 | ||||
Boris Feld
|
r35342 | $ cd .. | ||
repository config is taken in account | ||||
------------------------------------- | ||||
$ cat << EOF >> $HGRCPATH | ||||
> [format] | ||||
> maxchainlen = 1 | ||||
> EOF | ||||
$ hg init localconfig | ||||
$ cd localconfig | ||||
$ cat << EOF > file | ||||
> some content | ||||
> with some length | ||||
> to make sure we get a delta | ||||
> after changes | ||||
> very long | ||||
> very long | ||||
> very long | ||||
> very long | ||||
> very long | ||||
> very long | ||||
> very long | ||||
> very long | ||||
> very long | ||||
> very long | ||||
> very long | ||||
> EOF | ||||
$ hg -q commit -A -m A | ||||
$ echo "new line" >> file | ||||
$ hg -q commit -m B | ||||
$ echo "new line" >> file | ||||
$ hg -q commit -m C | ||||
$ cat << EOF >> .hg/hgrc | ||||
> [format] | ||||
> maxchainlen = 9001 | ||||
> EOF | ||||
$ hg config format | ||||
format.maxchainlen=9001 | ||||
$ hg debugindex file | ||||
rev offset length delta linkrev nodeid p1 p2 | ||||
0 0 77 -1 0 bcc1d3df78b2 000000000000 000000000000 | ||||
1 77 21 0 1 af3e29f7a72e bcc1d3df78b2 000000000000 | ||||
2 98 84 -1 2 8daf79c5522b af3e29f7a72e 000000000000 | ||||
$ hg debugupgraderepo --run --optimize redeltaall | ||||
upgrade will perform the following actions: | ||||
requirements | ||||
preserved: dotencode, fncache, generaldelta, revlogv1, store | ||||
redeltaall | ||||
deltas within internal storage will be fully recomputed; this will likely drastically slow down execution time | ||||
beginning upgrade... | ||||
repository locked and read-only | ||||
creating temporary repository to stage migrated data: $TESTTMP/localconfig/.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 497 bytes in store; 882 bytes tracked data | ||||
migrating 1 filelogs containing 3 revisions (182 bytes in store; 573 bytes tracked data) | ||||
Boris Feld
|
r35343 | finished migrating 3 filelog revisions across 1 filelogs; change in size: -63 bytes | ||
Boris Feld
|
r35342 | migrating 1 manifests containing 3 revisions (141 bytes in store; 138 bytes tracked data) | ||
finished migrating 3 manifest revisions across 1 manifests; change in size: 0 bytes | ||||
migrating changelog containing 3 revisions (174 bytes in store; 171 bytes tracked data) | ||||
finished migrating 3 changelog revisions; change in size: 0 bytes | ||||
Boris Feld
|
r35343 | finished migrating 9 total revisions; total change in store size: -63 bytes | ||
Boris Feld
|
r35342 | 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/localconfig/.hg/upgradebackup.* (glob) | ||||
replacing store... | ||||
Matt Harbison
|
r35361 | store replacement complete; repository was inconsistent for *s (glob) | ||
Boris Feld
|
r35342 | finalizing requirements file and making repository readable again | ||
removing temporary repository $TESTTMP/localconfig/.hg/upgrade.* (glob) | ||||
copy of old repository backed up at $TESTTMP/localconfig/.hg/upgradebackup.* (glob) | ||||
the old repository will not be deleted; remove it to free up disk space once the upgraded repository is verified | ||||
$ hg debugindex file | ||||
rev offset length delta linkrev nodeid p1 p2 | ||||
0 0 77 -1 0 bcc1d3df78b2 000000000000 000000000000 | ||||
1 77 21 0 1 af3e29f7a72e bcc1d3df78b2 000000000000 | ||||
Boris Feld
|
r35343 | 2 98 21 1 2 8daf79c5522b af3e29f7a72e 000000000000 | ||
Boris Feld
|
r35342 | $ cd .. | ||
$ cat << EOF >> $HGRCPATH | ||||
> [format] | ||||
> maxchainlen = 9001 | ||||
> EOF | ||||