Mercurial > hg
changeset 42137:d086ba387ae8
upgrade: support upgrade to/from zstd storage (issue6088)
Now that we have an official config option for a shiny format improvement, we
better make it simple to migrate to/from it.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 01 Feb 2019 15:51:02 +0100 |
parents | 10a6725dca6e |
children | caebe5e7f4bd |
files | mercurial/upgrade.py tests/test-upgrade-repo.t |
diffstat | 2 files changed, 102 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/upgrade.py Wed Mar 27 18:27:03 2019 +0100 +++ b/mercurial/upgrade.py Fri Feb 01 15:51:02 2019 +0100 @@ -24,6 +24,10 @@ vfs as vfsmod, ) +from .utils import ( + compression, +) + def requiredsourcerequirements(repo): """Obtain requirements required to be present to upgrade a repo. @@ -61,9 +65,16 @@ the dropped requirement must appear in the returned set for the upgrade to be allowed. """ - return { + supported = { localrepo.SPARSEREVLOG_REQUIREMENT, } + for name in compression.compengines: + engine = compression.compengines[name] + if engine.available() and engine.revlogheader(): + supported.add(b'exp-compression-%s' % name) + if engine.name() == 'zstd': + supported.add(b'revlog-compression-zstd') + return supported def supporteddestrequirements(repo): """Obtain requirements that upgrade supports in the destination. @@ -73,7 +84,7 @@ Extensions should monkeypatch this to add their custom requirements. """ - return { + supported = { 'dotencode', 'fncache', 'generaldelta', @@ -81,6 +92,13 @@ 'store', localrepo.SPARSEREVLOG_REQUIREMENT, } + for name in compression.compengines: + engine = compression.compengines[name] + if engine.available() and engine.revlogheader(): + supported.add(b'exp-compression-%s' % name) + if engine.name() == 'zstd': + supported.add(b'revlog-compression-zstd') + return supported def allowednewrequirements(repo): """Obtain requirements that can be added to a repository during upgrade. @@ -92,12 +110,19 @@ bad additions because the whitelist approach is safer and will prevent future, unknown requirements from accidentally being added. """ - return { + supported = { 'dotencode', 'fncache', 'generaldelta', localrepo.SPARSEREVLOG_REQUIREMENT, } + for name in compression.compengines: + engine = compression.compengines[name] + if engine.available() and engine.revlogheader(): + supported.add(b'exp-compression-%s' % name) + if engine.name() == 'zstd': + supported.add(b'revlog-compression-zstd') + return supported def preservedrequirements(repo): return set()
--- a/tests/test-upgrade-repo.t Wed Mar 27 18:27:03 2019 +0100 +++ b/tests/test-upgrade-repo.t Fri Feb 01 15:51:02 2019 +0100 @@ -854,4 +854,78 @@ generaldelta revlogv1 store + +#if zstd + +Check upgrading to a zstd revlog +-------------------------------- + +upgrade + + $ hg --config format.revlog-compression=zstd debugupgraderepo --run --no-backup >/dev/null + $ hg debugformat -v + format-variant repo config default + fncache: yes yes yes + dotencode: yes yes yes + generaldelta: yes yes yes + sparserevlog: yes yes yes + plain-cl-delta: yes yes yes + compression: zstd zlib zlib + compression-level: default default default + $ cat .hg/requires + dotencode + fncache + generaldelta + revlog-compression-zstd + revlogv1 + sparserevlog + store + +downgrade + + $ hg debugupgraderepo --run --no-backup > /dev/null + $ hg debugformat -v + format-variant repo config default + fncache: yes yes yes + dotencode: yes yes yes + generaldelta: yes yes yes + sparserevlog: yes yes yes + plain-cl-delta: yes yes yes + compression: zlib zlib zlib + compression-level: default default default + $ cat .hg/requires + dotencode + fncache + generaldelta + revlogv1 + sparserevlog + store + +upgrade from hgrc + + $ cat >> .hg/hgrc << EOF + > [format] + > revlog-compression=zstd + > EOF + $ hg debugupgraderepo --run --no-backup > /dev/null + $ hg debugformat -v + format-variant repo config default + fncache: yes yes yes + dotencode: yes yes yes + generaldelta: yes yes yes + sparserevlog: yes yes yes + plain-cl-delta: yes yes yes + compression: zstd zstd zlib + compression-level: default default default + $ cat .hg/requires + dotencode + fncache + generaldelta + revlog-compression-zstd + revlogv1 + sparserevlog + store + $ cd .. + +#endif