D2490: narrow: consider both local and remote matchers in narrowchangegroup
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Thu Mar 1 02:18:13 UTC 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rHGae95b0c81051: narrow: consider both local and remote matchers in narrowchangegroup (authored by martinvonz, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D2490?vs=6190&id=6223
REVISION DETAIL
https://phab.mercurial-scm.org/D2490
AFFECTED FILES
hgext/narrow/narrowchangegroup.py
tests/test-narrow-exchange.t
CHANGE DETAILS
diff --git a/tests/test-narrow-exchange.t b/tests/test-narrow-exchange.t
--- a/tests/test-narrow-exchange.t
+++ b/tests/test-narrow-exchange.t
@@ -137,13 +137,12 @@
$ hg pull ssh://user@dummy/narrow2
pulling from ssh://user@dummy/narrow2
searching for changes
- remote: abort: unable to resolve parent while packing 'data/inside2/f.i' 3 for changeset 5 (?)
adding changesets
- remote: abort: unexpected error: unable to resolve parent while packing 'data/inside2/f.i' 3 for changeset 5
- transaction abort!
- rollback completed
- abort: pull failed on remote
- [255]
+ adding manifests
+ adding file changes
+ added 1 changesets with 0 changes to 0 files
+ new changesets d78a96df731d
+ (run 'hg update' to get a working copy)
Check that the resulting history is valid in the full repo
@@ -204,7 +203,7 @@
$ hg push ssh://user@dummy/narrow2
pushing to ssh://user@dummy/narrow2
searching for changes
- remote has heads on branch 'default' that are not known locally: d78a96df731d
- abort: push creates new remote head 5970befb64ba!
- (pull and merge or see 'hg help push' for details about pushing new heads)
- [255]
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 0 changes to 0 files
diff --git a/hgext/narrow/narrowchangegroup.py b/hgext/narrow/narrowchangegroup.py
--- a/hgext/narrow/narrowchangegroup.py
+++ b/hgext/narrow/narrowchangegroup.py
@@ -13,32 +13,38 @@
error,
extensions,
manifest,
+ match as matchmod,
mdiff,
node,
revlog,
util,
)
def setup():
+ def _cgmatcher(cgpacker):
+ localmatcher = getattr(cgpacker._repo, 'narrowmatch', lambda: None)()
+ remotematcher = getattr(cgpacker, '_narrow_matcher', lambda: None)()
+ if localmatcher and remotematcher:
+ return matchmod.intersectmatchers(localmatcher, remotematcher)
+ else:
+ return localmatcher or remotematcher
+
def prune(orig, self, revlog, missing, commonrevs):
if isinstance(revlog, manifest.manifestrevlog):
- matcher = getattr(self._repo, 'narrowmatch',
- getattr(self, '_narrow_matcher', None))
- if (matcher is not None and
- not matcher().visitdir(revlog._dir[:-1] or '.')):
+ matcher = _cgmatcher(self)
+ if (matcher and
+ not matcher.visitdir(revlog._dir[:-1] or '.')):
return []
return orig(self, revlog, missing, commonrevs)
extensions.wrapfunction(changegroup.cg1packer, 'prune', prune)
def generatefiles(orig, self, changedfiles, linknodes, commonrevs,
source):
- matcher = getattr(self._repo, 'narrowmatch',
- getattr(self, '_narrow_matcher', None))
- if matcher is not None:
- narrowmatch = matcher()
- changedfiles = [f for f in changedfiles if narrowmatch(f)]
+ matcher = _cgmatcher(self)
+ if matcher:
+ changedfiles = filter(matcher, changedfiles)
if getattr(self, 'is_shallow', False):
# See comment in generate() for why this sadness is a thing.
mfdicts = self._mfdicts
To: martinvonz, durin42, #hg-reviewers, indygreg
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list