diff mercurial/changegroup.py @ 38806:5742d0428ed9

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
author Gregory Szorc <gregory.szorc@gmail.com>
date Sat, 28 Jul 2018 14:52:46 -0700
parents 1d01cf0416a5
children a232e6744ba3
line wrap: on
line diff
--- 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]