# HG changeset patch # User Pierre-Yves David # Date 1568061775 -7200 # Node ID 827cb4fe62a3fb3d0ca880e08f3daa5e2c413c3f # Parent 041f042afcc51dc94b7ab9ff101c3ec4be8380b7 sidedata: introduce a new requirement to protect the feature The feature will be usable only within repository supported by version of Mercurial with the support. Since the support is not fully implemented yet, the requirement has a temporary, experimental name. Differential Revision: https://phab.mercurial-scm.org/D6886 diff -r 041f042afcc5 -r 827cb4fe62a3 mercurial/configitems.py --- a/mercurial/configitems.py Wed Sep 25 03:58:46 2019 +0200 +++ b/mercurial/configitems.py Mon Sep 09 22:42:55 2019 +0200 @@ -733,6 +733,10 @@ coreconfigitem('format', 'usestore', default=True, ) +coreconfigitem('format', 'use-side-data', + default=False, + experimental=True, +) coreconfigitem('format', 'internal-phase', default=False, experimental=True, diff -r 041f042afcc5 -r 827cb4fe62a3 mercurial/localrepo.py --- a/mercurial/localrepo.py Wed Sep 25 03:58:46 2019 +0200 +++ b/mercurial/localrepo.py Mon Sep 09 22:42:55 2019 +0200 @@ -394,6 +394,10 @@ # This is why once a repository has enabled sparse-read, it becomes required. SPARSEREVLOG_REQUIREMENT = 'sparserevlog' +# A repository with the sidedataflag requirement will allow to store extra +# information for revision without altering their original hashes. +SIDEDATA_REQUIREMENT = 'exp-sidedata-flag' + # Functions receiving (ui, features) that extensions can register to impact # the ability to load repositories with custom requirements. Only # functions defined in loaded extensions are called. @@ -814,6 +818,9 @@ if sparserevlog: options[b'generaldelta'] = True + sidedata = SIDEDATA_REQUIREMENT in requirements + options[b'side-data'] = sidedata + maxchainlen = None if sparserevlog: maxchainlen = revlogconst.SPARSE_REVLOG_MAX_CHAIN_LENGTH @@ -917,6 +924,7 @@ 'generaldelta', 'treemanifest', REVLOGV2_REQUIREMENT, + SIDEDATA_REQUIREMENT, SPARSEREVLOG_REQUIREMENT, bookmarks.BOOKMARKS_IN_STORE_REQUIREMENT, } @@ -3153,6 +3161,10 @@ requirements.add('generaldelta') if ui.configbool('format', 'sparse-revlog'): requirements.add(SPARSEREVLOG_REQUIREMENT) + + # experimental config: format.use-side-data + if ui.configbool('format', 'use-side-data'): + requirements.add(SIDEDATA_REQUIREMENT) if ui.configbool('experimental', 'treemanifest'): requirements.add('treemanifest') diff -r 041f042afcc5 -r 827cb4fe62a3 mercurial/revlog.py --- a/mercurial/revlog.py Wed Sep 25 03:58:46 2019 +0200 +++ b/mercurial/revlog.py Mon Sep 09 22:42:55 2019 +0200 @@ -388,6 +388,7 @@ self._maxdeltachainspan = opts['maxdeltachainspan'] if self._mmaplargeindex and 'mmapindexthreshold' in opts: mmapindexthreshold = opts['mmapindexthreshold'] + self.hassidedata = bool(opts.get('side-data', False)) self._sparserevlog = bool(opts.get('sparse-revlog', False)) withsparseread = bool(opts.get('with-sparse-read', False)) # sparse-revlog forces sparse-read @@ -1849,6 +1850,10 @@ if sidedata is None: sidedata = {} + elif not self.hassidedata: + raise error.ProgrammingError( + _("trying to add sidedata to a revlog who don't support them") + ) if flags: node = node or self.hash(text, p1, p2)