From patchwork Tue Oct 8 00:36:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D6939: sidedata: apply basic but tight security around exchange From: phabricator X-Patchwork-Id: 42079 Message-Id: <0585c5e9e62c486a558a66a9e352da38@localhost.localdomain> To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Tue, 8 Oct 2019 00:36:47 +0000 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 To: marmoute, #hg-reviewers Cc: indygreg, martinvonz, mercurial-devel 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