narrow: only diff manifest part within narrowspec when generating changegroup
authorMartin von Zweigbergk <martinvonz@google.com>
Tue, 13 Feb 2018 13:16:06 -0800
changeset 36246 c407ccd06abd
parent 36245 cc46e68f050f
child 36247 2ad527f7d27a
narrow: only diff manifest part within narrowspec when generating changegroup Since 959ebff3505a (manifest: add match argument to diff and filesnotin, 2017-03-07), we have a more efficient way of diffing manifests while applying a matcher. Let's use that while generating narrowed changegroups, so we avoid diffing parts of the manifest that don't match the narrowspec. Differential Revision: https://phab.mercurial-scm.org/D2233
hgext/narrow/narrowbundle2.py
--- a/hgext/narrow/narrowbundle2.py	Sat Jan 06 17:44:57 2018 +0900
+++ b/hgext/narrow/narrowbundle2.py	Tue Feb 13 13:16:06 2018 -0800
@@ -141,14 +141,14 @@
                 # changesets because it's not always correct. TODO: could
                 # we trust it for the non-merge case?
                 p1mf = mfl[cl.changelogrevision(ps[0]).manifest].read()
-                needed = any(match(f) for f in curmf.diff(p1mf).iterkeys())
+                needed = bool(curmf.diff(p1mf, match))
                 if not needed and len(ps) > 1:
                     # For merge changes, the list of changed files is not
                     # helpful, since we need to emit the merge if a file
                     # in the narrow spec has changed on either side of the
                     # merge. As a result, we do a manifest diff to check.
                     p2mf = mfl[cl.changelogrevision(ps[1]).manifest].read()
-                    needed = any(match(f) for f in curmf.diff(p2mf).iterkeys())
+                    needed = bool(curmf.diff(p2mf, match))
             else:
                 # For a root node, we need to include the node if any
                 # files in the node match the narrowspec.