indygreg created this revision. Herald added a subscriber: mercurial-devel. Herald added a reviewer: hg-reviewers.
REVISION SUMMARY 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. REPOSITORY rHG Mercurial REVISION DETAIL https://phab.mercurial-scm.org/D5136 AFFECTED FILES mercurial/exchange.py mercurial/hg.py CHANGE DETAILS 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. 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() To: indygreg, #hg-reviewers Cc: mercurial-devel _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel