D4539: exchange: support defining narrow file patterns for pull
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Wed Sep 12 09:02:47 EDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG130e5df346d5: exchange: support defining narrow file patterns for pull (authored by indygreg, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D4539?vs=10916&id=10929
REVISION DETAIL
https://phab.mercurial-scm.org/D4539
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
@@ -749,7 +749,9 @@
overrides = {('ui', 'quietbookmarkmove'): True}
with local.ui.configoverride(overrides, 'clone'):
exchange.pull(local, srcpeer, revs,
- streamclonerequested=stream)
+ streamclonerequested=stream,
+ includepats=storeincludepats,
+ excludepats=storeexcludepats)
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
@@ -1313,7 +1313,8 @@
"""
def __init__(self, repo, remote, heads=None, force=False, bookmarks=(),
- remotebookmarks=None, streamclonerequested=None):
+ remotebookmarks=None, streamclonerequested=None,
+ includepats=None, excludepats=None):
# repo we pull into
self.repo = repo
# repo we pull from
@@ -1343,6 +1344,10 @@
self.stepsdone = set()
# Whether we attempted a clone from pre-generated bundles.
self.clonebundleattempted = False
+ # Set of file patterns to include.
+ self.includepats = includepats
+ # Set of file patterns to exclude.
+ self.excludepats = excludepats
@util.propertycache
def pulledsubset(self):
@@ -1447,7 +1452,7 @@
pullop.rheads = set(pullop.rheads) - pullop.common
def pull(repo, remote, heads=None, force=False, bookmarks=(), opargs=None,
- streamclonerequested=None):
+ streamclonerequested=None, includepats=None, excludepats=None):
"""Fetch repository data from a remote.
This is the main function used to retrieve data from a remote repository.
@@ -1465,13 +1470,29 @@
of revlogs from the server. This only works when the local repository is
empty. The default value of ``None`` means to respect the server
configuration for preferring stream clones.
+ ``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.
Returns the ``pulloperation`` created for this pull.
"""
if opargs is None:
opargs = {}
+
+ # We allow the narrow patterns to be passed in explicitly to provide more
+ # flexibility for API consumers.
+ if includepats or excludepats:
+ includepats = includepats or set()
+ excludepats = excludepats or set()
+ else:
+ includepats, excludepats = repo.narrowpats
+
+ narrowspec.validatepatterns(includepats)
+ narrowspec.validatepatterns(excludepats)
+
pullop = pulloperation(repo, remote, heads, force, bookmarks=bookmarks,
streamclonerequested=streamclonerequested,
+ includepats=includepats, excludepats=excludepats,
**pycompat.strkwargs(opargs))
peerlocal = pullop.remote.local()
To: indygreg, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list