changegroup: inline prune() logic from narrow
prune() needs to ellide manifests that aren't part of the narrow
matcher.
The code is violating storage abstractions, so a comment has been
added. Keep in mind the impetus for moving this code to core
is so changegroup code can be refactored to be storage agnostic.
Differential Revision: https://phab.mercurial-scm.org/D4012
--- a/hgext/narrow/narrowchangegroup.py Sun Jul 22 15:50:45 2018 +0900
+++ b/hgext/narrow/narrowchangegroup.py Sat Jul 28 14:52:46 2018 -0700
@@ -12,7 +12,6 @@
changegroup,
error,
extensions,
- manifest,
mdiff,
node,
pycompat,
@@ -21,15 +20,6 @@
)
def setup():
- def prune(orig, self, revlog, missing, commonrevs):
- if isinstance(revlog, manifest.manifestrevlog):
- if not self._filematcher.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):
changedfiles = list(filter(self._filematcher, changedfiles))
--- a/mercurial/changegroup.py Sun Jul 22 15:50:45 2018 +0900
+++ b/mercurial/changegroup.py Sat Jul 28 14:52:46 2018 -0700
@@ -21,6 +21,7 @@
from . import (
dagutil,
error,
+ manifest,
match as matchmod,
mdiff,
phases,
@@ -589,6 +590,11 @@
# filter any nodes that claim to be part of the known set
def prune(self, revlog, missing, commonrevs):
+ # TODO this violates storage abstraction for manifests.
+ if isinstance(revlog, manifest.manifestrevlog):
+ if not self._filematcher.visitdir(revlog._dir[:-1] or '.'):
+ return []
+
rr, rl = revlog.rev, revlog.linkrev
return [n for n in missing if rl(rr(n)) not in commonrevs]