D5136: exchange: support declaring pull depth
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Wed Oct 17 13:18:05 UTC 2018
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
More information about the Mercurial-devel
mailing list