changegroup: move non-pruning of non-ellipsis manifests to _prunemanifests()
authorMartin von Zweigbergk <martinvonz@google.com>
Thu, 21 Feb 2019 21:27:42 -0800
changeset 41767 1c1c4ef8b72e
parent 41766 cd7059d17cb2
child 41768 041d829575ed
changegroup: move non-pruning of non-ellipsis manifests to _prunemanifests() Google has an extension that overrides _prunemanifests() and removes nodes that we fetch using another mechanism. That broke when _prunemanifests() no longer got called. It works again if we move the check for "not self._ellipses" inside _prunemanifests(). Differential Revision: https://phab.mercurial-scm.org/D6004
mercurial/changegroup.py
--- a/mercurial/changegroup.py	Thu Feb 21 19:11:35 2019 -0800
+++ b/mercurial/changegroup.py	Thu Feb 21 21:27:42 2019 -0800
@@ -1073,11 +1073,6 @@
                 # because of narrow clones). Do this even for the root
                 # directory (tree=='')
                 prunednodes = []
-            elif not self._ellipses:
-                # In non-ellipses case and large repositories, it is better to
-                # prevent calling of store.rev and store.linkrev on a lot of
-                # nodes as compared to sending some extra data
-                prunednodes = nodes.copy()
             else:
                 # Avoid sending any manifest nodes we can prove the
                 # client already has by checking linkrevs. See the
@@ -1110,6 +1105,11 @@
                     yield tree, []
 
     def _prunemanifests(self, store, nodes, commonrevs):
+        if not self._ellipses:
+            # In non-ellipses case and large repositories, it is better to
+            # prevent calling of store.rev and store.linkrev on a lot of
+            # nodes as compared to sending some extra data
+            return nodes.copy()
         # This is split out as a separate method to allow filtering
         # commonrevs in extension code.
         #