diff --git a/hgext/narrow/narrowbundle2.py b/hgext/narrow/narrowbundle2.py --- a/hgext/narrow/narrowbundle2.py +++ b/hgext/narrow/narrowbundle2.py @@ -260,8 +260,6 @@ getbundleargs['depth'] = 'plain' getbundleargs['oldincludepats'] = 'csv' getbundleargs['oldexcludepats'] = 'csv' - getbundleargs['includepats'] = 'csv' - getbundleargs['excludepats'] = 'csv' getbundleargs['known'] = 'csv' # Extend changegroup serving to handle requests from narrow clients. diff --git a/mercurial/exchange.py b/mercurial/exchange.py --- a/mercurial/exchange.py +++ b/mercurial/exchange.py @@ -40,6 +40,7 @@ streamclone, url as urlmod, util, + wireprototypes, ) from .utils import ( stringutil, @@ -1633,6 +1634,13 @@ kwargs['common'] = pullop.common kwargs['heads'] = pullop.heads or pullop.rheads + # check server supports narrow and then adding includepats and excludepats + servernarrow = pullop.remote.capable(wireprototypes.NARROWCAP) + if servernarrow and pullop.includepats: + kwargs['includepats'] = pullop.includepats + if servernarrow and pullop.excludepats: + kwargs['excludepats'] = pullop.excludepats + if streaming: kwargs['cg'] = False kwargs['stream'] = True diff --git a/mercurial/wireprototypes.py b/mercurial/wireprototypes.py --- a/mercurial/wireprototypes.py +++ b/mercurial/wireprototypes.py @@ -162,6 +162,8 @@ 'cg': 'boolean', 'cbattempted': 'boolean', 'stream': 'boolean', + 'includepats': 'csv', + 'excludepats': 'csv', } class baseprotocolhandler(interfaceutil.Interface):