@@ -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]
@@ -1302,6 +1316,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
@@ -1338,6 +1353,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
@@ -1377,6 +1393,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
@@ -1400,10 +1417,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
@@ -1420,17 +1438,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
@@ -1444,9 +1463,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
@@ -1463,6 +1483,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 !)
@@ -1487,9 +1508,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
@@ -1506,17 +1528,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
@@ -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
@@ -42,6 +42,7 @@
sidedata: no
persistent-nodemap: yes
copies-sdc: no
+ revlog-v2: no
plain-cl-delta: yes
compression: zlib
compression-level: default
@@ -561,6 +562,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
@@ -597,6 +599,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
@@ -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
@@ -424,6 +426,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
@@ -450,6 +453,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
@@ -478,6 +482,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
@@ -701,6 +701,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
@@ -709,7 +710,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
@@ -298,7 +298,7 @@
class sidedata(requirementformatvariant):
name = b'sidedata'
- _requirement = requirements.SIDEDATA_REQUIREMENT
+ _requirement = requirements.REVLOGV2_REQUIREMENT
default = False
@@ -309,6 +309,10 @@
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):
@@ -341,6 +345,17 @@
@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'
@@ -757,8 +772,6 @@
"""
return {
# Introduced in Mercurial 0.9.2.
- b'revlogv1',
- # Introduced in Mercurial 0.9.2.
b'store',
}
@@ -781,9 +794,18 @@
}
+def check_revlog_version(reqs):
+ """Check that the requirements contain at least one Revlog version"""
+ all_revlogs = {b'revlogv1', 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:
@@ -815,6 +837,8 @@
requirements.COPIESSDC_REQUIREMENT,
requirements.NODEMAP_REQUIREMENT,
requirements.SHARESAFE_REQUIREMENT,
+ requirements.REVLOGV2_REQUIREMENT,
+ b'revlogv1',
}
for name in compression.compengines:
engine = compression.compengines[name]
@@ -844,6 +868,7 @@
requirements.COPIESSDC_REQUIREMENT,
requirements.NODEMAP_REQUIREMENT,
requirements.SHARESAFE_REQUIREMENT,
+ requirements.REVLOGV2_REQUIREMENT,
}
for name in compression.compengines:
engine = compression.compengines[name]
@@ -865,6 +890,7 @@
future, unknown requirements from accidentally being added.
"""
supported = {
+ b'revlogv1', # allowed in case of downgrade
b'dotencode',
b'fncache',
b'generaldelta',
@@ -873,6 +899,7 @@
requirements.COPIESSDC_REQUIREMENT,
requirements.NODEMAP_REQUIREMENT,
requirements.SHARESAFE_REQUIREMENT,
+ requirements.REVLOGV2_REQUIREMENT,
}
for name in compression.compengines:
engine = compression.compengines[name]
@@ -885,7 +912,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:
@@ -3442,9 +3442,13 @@
# experimental config: format.exp-use-side-data
if ui.configbool(b'format', b'exp-use-side-data'):
+ requirements.discard(b'revlogv1')
+ 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(b'revlogv1')
+ requirements.add(requirementsmod.REVLOGV2_REQUIREMENT)
requirements.add(requirementsmod.SIDEDATA_REQUIREMENT)
requirements.add(requirementsmod.COPIESSDC_REQUIREMENT)
if ui.configbool(b'experimental', b'treemanifest'):
@@ -3452,7 +3456,7 @@
revlogv2 = ui.config(b'experimental', b'revlogv2')
if revlogv2 == b'enable-unstable-format-and-corrupt-my-data':
- requirements.remove(b'revlogv1')
+ requirements.discard(b'revlogv1')
# generaldelta is implied by revlogv2.
requirements.discard(b'generaldelta')
requirements.add(requirementsmod.REVLOGV2_REQUIREMENT)
@@ -1253,10 +1253,19 @@
b'usestore',
default=True,
)
+
+# Right now, the only efficient implement of the nodemap logic is in Rust, so
+# the persistent nodemap feature needs to stay experimental as long as the Rust
+# extensions are an experimental feature.
+coreconfigitem(
+ b'format', b'use-persistent-nodemap', default=False, experimental=True
+)
+
coreconfigitem(
b'format',
- b'use-persistent-nodemap',
+ b'exp-revlogv2.2',
default=False,
+ experimental=True,
)
coreconfigitem(
b'format',