# HG changeset patch # User Gregory Szorc # Date 1533761454 25200 # Node ID 39f5c7afdc2532388bf2a39b845338379e660bde # Parent 5959ef78d8348c2108c43c3f52a45bad3646a616 changegroup: inline _prune() into call sites The functionality is pretty simple. As a bonus, _prune() had special code for the manifest case. We can now exclude this check from the file call site. Differential Revision: https://phab.mercurial-scm.org/D4199 diff -r 5959ef78d834 -r 39f5c7afdc25 mercurial/changegroup.py --- a/mercurial/changegroup.py Tue Aug 07 15:31:03 2018 -0700 +++ b/mercurial/changegroup.py Wed Aug 08 13:50:54 2018 -0700 @@ -26,7 +26,6 @@ from . import ( dagutil, error, - manifest, match as matchmod, mdiff, phases, @@ -824,16 +823,6 @@ yield closechunk() - # filter any nodes that claim to be part of the known set - def _prune(self, store, missing, commonrevs): - # TODO this violates storage abstraction for manifests. - if isinstance(store, manifest.manifestrevlog): - if not self._filematcher.visitdir(store._dir[:-1] or '.'): - return [] - - rr, rl = store.rev, store.linkrev - return [n for n in missing if rl(rr(n)) not in commonrevs] - def generate(self, commonrevs, clnodes, fastpathlinkrev, source): """Yield a sequence of changegroup byte chunks.""" @@ -1031,7 +1020,13 @@ while tmfnodes: dir, nodes = tmfnodes.popitem() store = dirlog(dir) - prunednodes = self._prune(store, nodes, commonrevs) + + if not self._filematcher.visitdir(store._dir[:-1] or '.'): + prunednodes = [] + else: + frev, flr = store.rev, store.linkrev + prunednodes = [n for n in nodes + if flr(frev(n)) not in commonrevs] if dir and not prunednodes: continue @@ -1127,7 +1122,10 @@ def lookupfilelog(x): return linkrevnodes[x] - filenodes = self._prune(filerevlog, linkrevnodes, commonrevs) + frev, flr = filerevlog.rev, filerevlog.linkrev + filenodes = [n for n in linkrevnodes + if flr(frev(n)) not in commonrevs] + if filenodes: if self._ellipses: revs = _sortnodesellipsis(filerevlog, filenodes,