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.