D6310: narrow: send specs as bundle2 data instead of param (issue5952) (issue6019)
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Sat Apr 27 12:15:30 EDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG280f7a095df8: narrow: send specs as bundle2 data instead of param (issue5952) (issue6019) (authored by pulkit, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D6310?vs=14930&id=14932
REVISION DETAIL
https://phab.mercurial-scm.org/D6310
AFFECTED FILES
hgext/narrow/narrowbundle2.py
mercurial/exchange.py
tests/test-narrow-acl.t
CHANGE DETAILS
diff --git a/tests/test-narrow-acl.t b/tests/test-narrow-acl.t
--- a/tests/test-narrow-acl.t
+++ b/tests/test-narrow-acl.t
@@ -10,7 +10,7 @@
> hg commit -m "Add $x"
> done
$ cat >> .hg/hgrc << EOF
- > [narrowhgacl]
+ > [narrowacl]
> default.includes=f1 f2
> EOF
$ hg serve -a localhost -p $HGPORT1 -d --pid-file=hg.pid
diff --git a/mercurial/exchange.py b/mercurial/exchange.py
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -49,7 +49,7 @@
urlerr = util.urlerr
urlreq = util.urlreq
-_NARROWACL_SECTION = 'narrowhgacl'
+_NARROWACL_SECTION = 'narrowacl'
# Maps bundle version human names to changegroup versions.
_bundlespeccgversions = {'v1': '01',
@@ -2213,13 +2213,10 @@
if (kwargs.get(r'narrow', False) and kwargs.get(r'narrow_acl', False)
and (include or exclude)):
- narrowspecpart = bundler.newpart('narrow:spec')
- if include:
- narrowspecpart.addparam(
- 'include', '\n'.join(include), mandatory=True)
- if exclude:
- narrowspecpart.addparam(
- 'exclude', '\n'.join(exclude), mandatory=True)
+ # this is mandatory because otherwise ACL clients won't work
+ narrowspecpart = bundler.newpart('Narrow:responsespec')
+ narrowspecpart.data = '%s\0%s' % ('\n'.join(include),
+ '\n'.join(exclude))
@getbundle2partsgenerator('bookmarks')
def _getbundlebookmarkpart(bundler, repo, source, bundlecaps=None,
diff --git a/hgext/narrow/narrowbundle2.py b/hgext/narrow/narrowbundle2.py
--- a/hgext/narrow/narrowbundle2.py
+++ b/hgext/narrow/narrowbundle2.py
@@ -31,8 +31,9 @@
stringutil,
)
-_NARROWACL_SECTION = 'narrowhgacl'
+_NARROWACL_SECTION = 'narrowacl'
_CHANGESPECPART = 'narrow:changespec'
+_RESSPECS = 'narrow:responsespec'
_SPECPART = 'narrow:spec'
_SPECPART_INCLUDE = 'include'
_SPECPART_EXCLUDE = 'exclude'
@@ -142,6 +143,10 @@
@bundle2.parthandler(_SPECPART, (_SPECPART_INCLUDE, _SPECPART_EXCLUDE))
def _handlechangespec_2(op, inpart):
+ # XXX: This bundle2 handling is buggy and should be removed after hg5.2 is
+ # released. New servers will send a mandatory bundle2 part named
+ # 'Narrowspec' and will send specs as data instead of params.
+ # Refer to issue5952 and 6019
includepats = set(inpart.params.get(_SPECPART_INCLUDE, '').splitlines())
excludepats = set(inpart.params.get(_SPECPART_EXCLUDE, '').splitlines())
narrowspec.validatepatterns(includepats)
@@ -153,6 +158,21 @@
op.repo.setnarrowpats(includepats, excludepats)
narrowspec.copytoworkingcopy(op.repo)
+ at bundle2.parthandler(_RESSPECS)
+def _handlenarrowspecs(op, inpart):
+ data = inpart.read()
+ inc, exc = data.split('\0')
+ includepats = set(inc.splitlines())
+ excludepats = set(exc.splitlines())
+ narrowspec.validatepatterns(includepats)
+ narrowspec.validatepatterns(excludepats)
+
+ if repository.NARROW_REQUIREMENT not in op.repo.requirements:
+ op.repo.requirements.add(repository.NARROW_REQUIREMENT)
+ op.repo._writerequirements()
+ op.repo.setnarrowpats(includepats, excludepats)
+ narrowspec.copytoworkingcopy(op.repo)
+
@bundle2.parthandler(_CHANGESPECPART)
def _handlechangespec(op, inpart):
repo = op.repo
To: pulkit, durin42, martinvonz, #hg-reviewers
Cc: indygreg, idlsoft, mercurial-devel
More information about the Mercurial-devel
mailing list