diff --git a/mercurial/configitems.py b/mercurial/configitems.py --- a/mercurial/configitems.py +++ b/mercurial/configitems.py @@ -1299,6 +1299,12 @@ ) coreconfigitem( b'format', + b'exp-revlogv2.2', + default=False, + experimental=True, +) +coreconfigitem( + b'format', b'exp-use-copies-side-data-changeset', default=False, experimental=True, diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -3447,9 +3447,13 @@ # experimental config: format.exp-use-side-data if ui.configbool(b'format', b'exp-use-side-data'): + requirements.discard(requirementsmod.REVLOGV1_REQUIREMENT) + requirements.add(requirementsmod.REVLOGV2_REQUIREMENT) requirements.add(requirementsmod.SIDEDATA_REQUIREMENT) # experimental config: format.exp-use-copies-side-data-changeset if ui.configbool(b'format', b'exp-use-copies-side-data-changeset'): + requirements.discard(requirementsmod.REVLOGV1_REQUIREMENT) + requirements.add(requirementsmod.REVLOGV2_REQUIREMENT) requirements.add(requirementsmod.SIDEDATA_REQUIREMENT) requirements.add(requirementsmod.COPIESSDC_REQUIREMENT) if ui.configbool(b'experimental', b'treemanifest'): @@ -3457,7 +3461,7 @@ revlogv2 = ui.config(b'experimental', b'revlogv2') if revlogv2 == b'enable-unstable-format-and-corrupt-my-data': - requirements.remove(requirementsmod.REVLOGV1_REQUIREMENT) + requirements.discard(requirementsmod.REVLOGV1_REQUIREMENT) # generaldelta is implied by revlogv2. requirements.discard(requirementsmod.GENERALDELTA_REQUIREMENT) requirements.add(requirementsmod.REVLOGV2_REQUIREMENT) diff --git a/mercurial/upgrade_utils/actions.py b/mercurial/upgrade_utils/actions.py --- a/mercurial/upgrade_utils/actions.py +++ b/mercurial/upgrade_utils/actions.py @@ -328,7 +328,7 @@ class sidedata(requirementformatvariant): name = b'sidedata' - _requirement = requirements.SIDEDATA_REQUIREMENT + _requirement = requirements.REVLOGV2_REQUIREMENT default = False @@ -339,6 +339,11 @@ upgrademessage = _(b'Allows storage of extra data alongside a revision.') + @classmethod + def fromrepo(cls, repo): + assert cls._requirement is not None + return cls._requirement in repo.requirements + @registerformatvariant class persistentnodemap(requirementformatvariant): @@ -371,6 +376,15 @@ @registerformatvariant +class revlogv2(requirementformatvariant): + name = b'revlog-v2' + _requirement = requirements.REVLOGV2_REQUIREMENT + default = False + description = _(b'Version 2 of the revlog.') + upgrademessage = _(b'very experimental') + + +@registerformatvariant class removecldeltachain(formatvariant): name = b'plain-cl-delta' @@ -857,8 +871,6 @@ """ return { # Introduced in Mercurial 0.9.2. - requirements.REVLOGV1_REQUIREMENT, - # Introduced in Mercurial 0.9.2. requirements.STORE_REQUIREMENT, } @@ -881,9 +893,21 @@ } +def check_revlog_version(reqs): + """Check that the requirements contain at least one Revlog version""" + all_revlogs = { + requirements.REVLOGV1_REQUIREMENT, + requirements.REVLOGV2_REQUIREMENT, + } + if not all_revlogs.intersection(reqs): + msg = _(b'cannot upgrade repository; missing a revlog version') + raise error.Abort(msg) + + def check_source_requirements(repo): """Ensure that no existing requirements prevent the repository upgrade""" + check_revlog_version(repo.requirements) required = requiredsourcerequirements(repo) missingreqs = required - repo.requirements if missingreqs: @@ -915,6 +939,8 @@ requirements.COPIESSDC_REQUIREMENT, requirements.NODEMAP_REQUIREMENT, requirements.SHARESAFE_REQUIREMENT, + requirements.REVLOGV2_REQUIREMENT, + b'revlogv1', } for name in compression.compengines: engine = compression.compengines[name] @@ -944,6 +970,7 @@ requirements.COPIESSDC_REQUIREMENT, requirements.NODEMAP_REQUIREMENT, requirements.SHARESAFE_REQUIREMENT, + requirements.REVLOGV2_REQUIREMENT, } for name in compression.compengines: engine = compression.compengines[name] @@ -974,6 +1001,7 @@ requirements.COPIESSDC_REQUIREMENT, requirements.NODEMAP_REQUIREMENT, requirements.SHARESAFE_REQUIREMENT, + requirements.REVLOGV2_REQUIREMENT, } for name in compression.compengines: engine = compression.compengines[name] @@ -986,7 +1014,7 @@ def check_requirements_changes(repo, new_reqs): old_reqs = repo.requirements - + check_revlog_version(repo.requirements) support_removal = supportremovedrequirements(repo) no_remove_reqs = old_reqs - new_reqs - support_removal if no_remove_reqs: diff --git a/tests/test-copies-chain-merge.t b/tests/test-copies-chain-merge.t --- a/tests/test-copies-chain-merge.t +++ b/tests/test-copies-chain-merge.t @@ -1469,6 +1469,7 @@ sidedata: no yes no persistent-nodemap: no no no copies-sdc: no yes no + revlog-v2: no yes no plain-cl-delta: yes yes yes compression: * (glob) compression-level: default default default @@ -1477,7 +1478,8 @@ requirements preserved: * (glob) - added: exp-copies-sidedata-changeset, exp-sidedata-flag + removed: revlogv1 + added: exp-copies-sidedata-changeset, exp-revlogv2.2, exp-sidedata-flag processed revlogs: - all-filelogs @@ -1507,6 +1509,7 @@ sidedata: no yes no persistent-nodemap: no no no copies-sdc: no yes no + revlog-v2: no yes no plain-cl-delta: yes yes yes compression: * (glob) compression-level: default default default @@ -1515,7 +1518,8 @@ requirements preserved: * (glob) - added: exp-copies-sidedata-changeset, exp-sidedata-flag + removed: revlogv1 + added: exp-copies-sidedata-changeset, exp-revlogv2.2, exp-sidedata-flag processed revlogs: - all-filelogs diff --git a/tests/test-copies-in-changeset.t b/tests/test-copies-in-changeset.t --- a/tests/test-copies-in-changeset.t +++ b/tests/test-copies-in-changeset.t @@ -42,6 +42,7 @@ sidedata: yes yes no persistent-nodemap: no no no copies-sdc: yes yes no + revlog-v2: yes yes no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default @@ -56,6 +57,7 @@ sidedata: no no no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: no no no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default @@ -427,6 +429,7 @@ sidedata: yes yes no persistent-nodemap: no no no copies-sdc: yes yes no + revlog-v2: yes yes no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default @@ -453,6 +456,7 @@ sidedata: yes yes no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: yes yes no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default @@ -481,6 +485,7 @@ sidedata: yes yes no persistent-nodemap: no no no copies-sdc: yes yes no + revlog-v2: yes yes no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default diff --git a/tests/test-persistent-nodemap.t b/tests/test-persistent-nodemap.t --- a/tests/test-persistent-nodemap.t +++ b/tests/test-persistent-nodemap.t @@ -59,6 +59,7 @@ sidedata: no persistent-nodemap: yes copies-sdc: no + revlog-v2: no plain-cl-delta: yes compression: zlib compression-level: default @@ -578,6 +579,7 @@ sidedata: no no no persistent-nodemap: yes no no copies-sdc: no no no + revlog-v2: no no no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default @@ -623,6 +625,7 @@ sidedata: no no no persistent-nodemap: no yes no copies-sdc: no no no + revlog-v2: no no no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default diff --git a/tests/test-sidedata.t b/tests/test-sidedata.t --- a/tests/test-sidedata.t +++ b/tests/test-sidedata.t @@ -59,6 +59,7 @@ sidedata: no no no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: no no no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default @@ -72,6 +73,7 @@ sidedata: no yes no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: no yes no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default @@ -91,6 +93,7 @@ sidedata: yes no no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: yes no no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default @@ -104,6 +107,7 @@ sidedata: yes no no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: yes no no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default diff --git a/tests/test-upgrade-repo.t b/tests/test-upgrade-repo.t --- a/tests/test-upgrade-repo.t +++ b/tests/test-upgrade-repo.t @@ -21,7 +21,7 @@ > EOF $ hg -R no-revlogv1 debugupgraderepo - abort: cannot upgrade repository; requirement missing: revlogv1 + abort: cannot upgrade repository; missing a revlog version [255] Cannot upgrade shared repositories @@ -61,6 +61,7 @@ sidedata: no persistent-nodemap: no copies-sdc: no + revlog-v2: no plain-cl-delta: yes compression: zlib compression-level: default @@ -74,6 +75,7 @@ sidedata: no no no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: no no no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default @@ -87,6 +89,7 @@ sidedata: no no no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: no no no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default @@ -100,6 +103,7 @@ [formatvariant.name.uptodate|sidedata: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no] [formatvariant.name.uptodate|persistent-nodemap:][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no] [formatvariant.name.uptodate|copies-sdc: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no] + [formatvariant.name.uptodate|revlog-v2: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no] [formatvariant.name.uptodate|plain-cl-delta: ][formatvariant.repo.uptodate| yes][formatvariant.config.default| yes][formatvariant.default| yes] [formatvariant.name.uptodate|compression: ][formatvariant.repo.uptodate| zlib][formatvariant.config.default| zlib][formatvariant.default| zlib] [formatvariant.name.uptodate|compression-level: ][formatvariant.repo.uptodate| default][formatvariant.config.default| default][formatvariant.default| default] @@ -154,6 +158,12 @@ "repo": false }, { + "config": false, + "default": false, + "name": "revlog-v2", + "repo": false + }, + { "config": true, "default": true, "name": "plain-cl-delta", @@ -306,6 +316,7 @@ sidedata: no persistent-nodemap: no copies-sdc: no + revlog-v2: no plain-cl-delta: yes compression: zlib compression-level: default @@ -319,6 +330,7 @@ sidedata: no no no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: no no no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default @@ -332,6 +344,7 @@ sidedata: no no no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: no no no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default @@ -345,6 +358,7 @@ [formatvariant.name.uptodate|sidedata: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no] [formatvariant.name.uptodate|persistent-nodemap:][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no] [formatvariant.name.uptodate|copies-sdc: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no] + [formatvariant.name.uptodate|revlog-v2: ][formatvariant.repo.uptodate| no][formatvariant.config.default| no][formatvariant.default| no] [formatvariant.name.uptodate|plain-cl-delta: ][formatvariant.repo.uptodate| yes][formatvariant.config.default| yes][formatvariant.default| yes] [formatvariant.name.uptodate|compression: ][formatvariant.repo.uptodate| zlib][formatvariant.config.default| zlib][formatvariant.default| zlib] [formatvariant.name.uptodate|compression-level: ][formatvariant.repo.uptodate| default][formatvariant.config.default| default][formatvariant.default| default] @@ -1288,6 +1302,7 @@ sidedata: no no no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: no no no plain-cl-delta: yes yes yes compression: zstd zlib zlib compression-level: default default default @@ -1324,6 +1339,7 @@ sidedata: no no no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: no no no plain-cl-delta: yes yes yes compression: zlib zlib zlib compression-level: default default default @@ -1363,6 +1379,7 @@ sidedata: no no no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: no no no plain-cl-delta: yes yes yes compression: zstd zstd zlib compression-level: default default default @@ -1386,10 +1403,11 @@ upgrade will perform the following actions: requirements - preserved: dotencode, fncache, generaldelta, revlogv1, store (no-zstd !) - preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, revlogv1, sparserevlog, store (zstd !) - added: exp-sidedata-flag (zstd !) - added: exp-sidedata-flag, sparserevlog (no-zstd !) + preserved: dotencode, fncache, generaldelta, store (no-zstd !) + preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, sparserevlog, store (zstd !) + removed: revlogv1 + added: exp-revlogv2.2, exp-sidedata-flag (zstd !) + added: exp-revlogv2.2, exp-sidedata-flag, sparserevlog (no-zstd !) processed revlogs: - all-filelogs @@ -1406,17 +1424,18 @@ sidedata: yes no no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: yes no no plain-cl-delta: yes yes yes compression: zlib zlib zlib (no-zstd !) compression: zstd zstd zlib (zstd !) compression-level: default default default $ cat .hg/requires dotencode + exp-revlogv2.2 exp-sidedata-flag fncache generaldelta revlog-compression-zstd (zstd !) - revlogv1 sparserevlog store $ hg debugsidedata -c 0 @@ -1430,9 +1449,10 @@ upgrade will perform the following actions: requirements - preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-zstd !) - preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, revlogv1, sparserevlog, store (zstd !) - removed: exp-sidedata-flag + preserved: dotencode, fncache, generaldelta, sparserevlog, store (no-zstd !) + preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, sparserevlog, store (zstd !) + removed: exp-revlogv2.2, exp-sidedata-flag + added: revlogv1 processed revlogs: - all-filelogs @@ -1449,6 +1469,7 @@ sidedata: no no no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: no no no plain-cl-delta: yes yes yes compression: zlib zlib zlib (no-zstd !) compression: zstd zstd zlib (zstd !) @@ -1473,9 +1494,10 @@ upgrade will perform the following actions: requirements - preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-zstd !) - preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, revlogv1, sparserevlog, store (zstd !) - added: exp-sidedata-flag + preserved: dotencode, fncache, generaldelta, sparserevlog, store (no-zstd !) + preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, sparserevlog, store (zstd !) + removed: revlogv1 + added: exp-revlogv2.2, exp-sidedata-flag processed revlogs: - all-filelogs @@ -1492,17 +1514,18 @@ sidedata: yes yes no persistent-nodemap: no no no copies-sdc: no no no + revlog-v2: yes yes no plain-cl-delta: yes yes yes compression: zlib zlib zlib (no-zstd !) compression: zstd zstd zlib (zstd !) compression-level: default default default $ cat .hg/requires dotencode + exp-revlogv2.2 exp-sidedata-flag fncache generaldelta revlog-compression-zstd (zstd !) - revlogv1 sparserevlog store $ hg debugsidedata -c 0