D6939: sidedata: apply basic but tight security around exchange

marmoute (Pierre-Yves David) phabricator at mercurial-scm.org
Tue Oct 8 00:36:47 UTC 2019


marmoute updated this revision to Diff 16943.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D6939?vs=16771&id=16943

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

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

AFFECTED FILES
  mercurial/bundle2.py
  mercurial/exchange.py

CHANGE DETAILS

diff --git a/mercurial/exchange.py b/mercurial/exchange.py
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -1049,6 +1049,8 @@
         cgpart.addparam(b'version', version)
     if b'treemanifest' in pushop.repo.requirements:
         cgpart.addparam(b'treemanifest', b'1')
+    if b'exp-sidedata-flag' in pushop.repo.requirements:
+        cgpart.addparam(b'exp-sidedata', b'1')
 
     def handlereply(op):
         """extract addchangegroup returns from server reply"""
@@ -2512,6 +2514,9 @@
     if b'treemanifest' in repo.requirements:
         part.addparam(b'treemanifest', b'1')
 
+    if b'exp-sidedata-flag' in repo.requirements:
+        part.addparam(b'exp-sidedata', b'1')
+
     if (
         kwargs.get(r'narrow', False)
         and kwargs.get(r'narrow_acl', False)
diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
--- a/mercurial/bundle2.py
+++ b/mercurial/bundle2.py
@@ -1711,6 +1711,8 @@
             part.addparam(
                 b'targetphase', b'%d' % phases.secret, mandatory=False
             )
+        if b'exp-sidedata-flag' in repo.requirements:
+            part.addparam(b'exp-sidedata', b'1')
 
     if opts.get(b'streamv2', False):
         addpartbundlestream2(bundler, repo, stream=True)
@@ -1930,7 +1932,14 @@
 
 
 @parthandler(
-    b'changegroup', (b'version', b'nbchanges', b'treemanifest', b'targetphase')
+    b'changegroup',
+    (
+        b'version',
+        b'nbchanges',
+        b'exp-sidedata',
+        b'treemanifest',
+        b'targetphase',
+    ),
 )
 def handlechangegroup(op, inpart):
     """apply a changegroup part on the repo
@@ -1965,6 +1974,14 @@
             op.repo.ui, op.repo.requirements, op.repo.features
         )
         op.repo._writerequirements()
+
+    bundlesidedata = bool(b'exp-sidedata' in inpart.params)
+    reposidedata = bool(b'exp-sidedata-flag' in op.repo.requirements)
+    if reposidedata and not bundlesidedata:
+        msg = b"repository is using sidedata but the bundle source do not"
+        hint = b'this is currently unsupported'
+        raise error.Abort(msg, hint=hint)
+
     extrakwargs = {}
     targetphase = inpart.params.get(b'targetphase')
     if targetphase is not None:
@@ -2551,5 +2568,7 @@
         part.addparam(b'version', cgversion)
         if b'treemanifest' in repo.requirements:
             part.addparam(b'treemanifest', b'1')
+        if b'exp-sidedata-flag' in repo.requirements:
+            part.addparam(b'exp-sidedata', b'1')
 
     return bundler



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


More information about the Mercurial-devel mailing list