Mercurial > hg
changeset 40331:ac59de55c8b4
exchange: support declaring pull depth
Upcoming commits will teach exchangev2 how to perform a shallow
clone. This commit teaches hg.clone(), exchange.pull(), and
exchange.pulloperation to recognize a request for a shallow clone
by having the caller specify a numeric depth of the maximum number of
ancestor changesets to fetch.
There are certainly other ways we could control shallow-ness. But this
one is simple to implement and is also how the narrow extension
controls things. So it seems to make sense to start here.
Differential Revision: https://phab.mercurial-scm.org/D5136
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Fri, 14 Sep 2018 14:56:13 -0700 |
parents | 00a4cd368e3f |
children | e0dea186ab6e |
files | mercurial/exchange.py mercurial/hg.py |
diffstat | 2 files changed, 12 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/exchange.py Wed Oct 17 10:10:05 2018 +0200 +++ b/mercurial/exchange.py Fri Sep 14 14:56:13 2018 -0700 @@ -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()
--- a/mercurial/hg.py Wed Oct 17 10:10:05 2018 +0200 +++ b/mercurial/hg.py Fri Sep 14 14:56:13 2018 -0700 @@ -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 @@ -749,7 +749,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.