Patchwork D6886: sidedata: introduce a new requirement to protect the feature

login
register
mail settings
Submitter phabricator
Date Oct. 1, 2019, 6:23 p.m.
Message ID <3bb2a23119dd0332d25b418bb366acb9@localhost.localdomain>
Download mbox | patch
Permalink /patch/41916/
State Not Applicable
Headers show

Comments

phabricator - Oct. 1, 2019, 6:23 p.m.
Closed by commit rHG827cb4fe62a3: sidedata: introduce a new requirement to protect the feature (authored by marmoute).
This revision was automatically updated to reflect the committed changes.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D6886?vs=16735&id=16758

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D6886/new/

REVISION DETAIL
  https://phab.mercurial-scm.org/D6886

AFFECTED FILES
  mercurial/configitems.py
  mercurial/localrepo.py
  mercurial/revlog.py

CHANGE DETAILS




To: marmoute, durin42, indygreg, #hg-reviewers
Cc: mercurial-devel

Patch

diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -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)
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -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 --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -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,