diff --git a/hgext/narrow/narrowbundle2.py b/hgext/narrow/narrowbundle2.py --- a/hgext/narrow/narrowbundle2.py +++ b/hgext/narrow/narrowbundle2.py @@ -144,6 +144,15 @@ def _handlechangespec_2(op, inpart): includepats = set(inpart.params.get(_SPECPART_INCLUDE, '').splitlines()) excludepats = set(inpart.params.get(_SPECPART_EXCLUDE, '').splitlines()) + data = inpart.read() + # old servers don't send includes and excludes using bundle2 data, they use + # bundle2 parameters instead. + if data: + inc, exc = data.split('\0') + if inc: + includepats |= set(inc.splitlines()) + if exc: + excludepats |= set(exc.splitlines()) narrowspec.validatepatterns(includepats) narrowspec.validatepatterns(excludepats) diff --git a/mercurial/exchange.py b/mercurial/exchange.py --- a/mercurial/exchange.py +++ b/mercurial/exchange.py @@ -2214,12 +2214,14 @@ if (kwargs.get(r'narrow', False) and kwargs.get(r'narrow_acl', False) and (include or exclude)): narrowspecpart = bundler.newpart('narrow:spec') + data = '' if include: - narrowspecpart.addparam( - 'include', '\n'.join(include), mandatory=True) + data += '\n'.join(include) + data += '\0' if exclude: - narrowspecpart.addparam( - 'exclude', '\n'.join(exclude), mandatory=True) + data += '\n'.join(exclude) + + narrowspecpart.data = data @getbundle2partsgenerator('bookmarks') def _getbundlebookmarkpart(bundler, repo, source, bundlecaps=None,