diff --git a/mercurial/exchange.py b/mercurial/exchange.py --- a/mercurial/exchange.py +++ b/mercurial/exchange.py @@ -1316,7 +1316,7 @@ def __init__(self, repo, remote, heads=None, force=False, bookmarks=(), remotebookmarks=None, streamclonerequested=None, - includepats=None, excludepats=None): + includepats=None, excludepats=None, depth=None): # repo we pull into self.repo = repo # repo we pull from @@ -1350,6 +1350,8 @@ self.includepats = includepats # Set of file patterns to exclude. self.excludepats = excludepats + # Number of ancestor changesets to pull from each pulled head. + self.depth = depth @util.propertycache def pulledsubset(self): @@ -1454,7 +1456,8 @@ pullop.rheads = set(pullop.rheads) - pullop.common def pull(repo, remote, heads=None, force=False, bookmarks=(), opargs=None, - streamclonerequested=None, includepats=None, excludepats=None): + streamclonerequested=None, includepats=None, excludepats=None, + depth=None): """Fetch repository data from a remote. This is the main function used to retrieve data from a remote repository. @@ -1475,6 +1478,9 @@ ``includepats`` and ``excludepats`` define explicit file patterns to include and exclude in storage, respectively. If not defined, narrow patterns from the repo instance are used, if available. + ``depth`` is an integer indicating the DAG depth of history we're + interested in. If defined, for each revision specified in ``heads``, we + will fetch up to this many of its ancestors and data associated with them. Returns the ``pulloperation`` created for this pull. """ @@ -1495,6 +1501,7 @@ pullop = pulloperation(repo, remote, heads, force, bookmarks=bookmarks, streamclonerequested=streamclonerequested, includepats=includepats, excludepats=excludepats, + depth=depth, **pycompat.strkwargs(opargs)) peerlocal = pullop.remote.local() diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -479,7 +479,7 @@ def clone(ui, peeropts, source, dest=None, pull=False, revs=None, update=True, stream=False, branch=None, shareopts=None, - storeincludepats=None, storeexcludepats=None): + storeincludepats=None, storeexcludepats=None, depth=None): """Make a copy of an existing repository. Create a copy of an existing repository in a new directory. The @@ -732,7 +732,8 @@ exchange.pull(local, srcpeer, revs, streamclonerequested=stream, includepats=storeincludepats, - excludepats=storeexcludepats) + excludepats=storeexcludepats, + depth=depth) elif srcrepo: # TODO lift restriction once exchange.push() accepts narrow # push.