diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -5454,6 +5454,7 @@ modheads = exchange.pull( repo, other, + path=path, heads=nodes, force=opts.get(b'force'), bookmarks=opts.get(b'bookmark', ()), diff --git a/mercurial/exchange.py b/mercurial/exchange.py --- a/mercurial/exchange.py +++ b/mercurial/exchange.py @@ -1378,6 +1378,7 @@ self, repo, remote, + path, heads=None, force=False, bookmarks=(), @@ -1391,6 +1392,10 @@ self.repo = repo # repo we pull from self.remote = remote + # path object used to build this remote + # + # Ideally, the remote peer would carry that directly. + self.remote_path = path # revision we try to pull (None is "all") self.heads = heads # bookmark pulled explicitly @@ -1556,6 +1561,7 @@ def pull( repo, remote, + path, heads=None, force=False, bookmarks=(), @@ -1611,8 +1617,9 @@ pullop = pulloperation( repo, remote, - heads, - force, + path=path, + heads=heads, + force=force, bookmarks=bookmarks, streamclonerequested=streamclonerequested, includepats=includepats,