mercurial/changegroup.py
changeset 38885 5839a170357d
parent 38884 a2f521773761
child 38886 66cf046ef60f
--- a/mercurial/changegroup.py	Sat Jul 28 17:59:37 2018 -0700
+++ b/mercurial/changegroup.py	Thu Aug 02 09:40:18 2018 -0700
@@ -851,6 +851,21 @@
             self._reorder = False
 
     def deltaparent(self, revlog, rev, p1, p2, prev):
+        # Narrow ellipses mode.
+        if util.safehasattr(self, 'full_nodes'):
+            # TODO: send better deltas when in narrow mode.
+            #
+            # changegroup.group() loops over revisions to send,
+            # including revisions we'll skip. What this means is that
+            # `prev` will be a potentially useless delta base for all
+            # ellipsis nodes, as the client likely won't have it. In
+            # the future we should do bookkeeping about which nodes
+            # have been sent to the client, and try to be
+            # significantly smarter about delta bases. This is
+            # slightly tricky because this same code has to work for
+            # all revlogs, and we don't have the linkrev/linknode here.
+            return p1
+
         dp = revlog.deltaparent(rev)
         if dp == nullrev and revlog.storedeltachains:
             # Avoid sending full revisions when delta parent is null. Pick prev