# HG changeset patch # User Gregory Szorc # Date 2018-07-28 21:52:46 # Node ID 5742d0428ed9b0b94d880ba572512ff92c9d6011 # Parent b9162ea1b81539de767660b4eeb3678ede41a681 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 diff --git a/hgext/narrow/narrowchangegroup.py b/hgext/narrow/narrowchangegroup.py --- a/hgext/narrow/narrowchangegroup.py +++ b/hgext/narrow/narrowchangegroup.py @@ -12,7 +12,6 @@ from mercurial import ( changegroup, error, extensions, - manifest, mdiff, node, pycompat, @@ -21,15 +20,6 @@ from mercurial import ( ) 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)) diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py --- a/mercurial/changegroup.py +++ b/mercurial/changegroup.py @@ -21,6 +21,7 @@ from .node import ( from . import ( dagutil, error, + manifest, match as matchmod, mdiff, phases, @@ -589,6 +590,11 @@ class cg1packer(object): # 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]