mercurial/wireprotov2server.py
changeset 39814 d059cb669632
parent 39813 c30faea8d02d
child 39815 d3d333ab167a
--- a/mercurial/wireprotov2server.py	Mon Sep 17 11:54:00 2018 -0700
+++ b/mercurial/wireprotov2server.py	Thu Sep 20 12:57:23 2018 -0700
@@ -752,19 +752,24 @@
             d[b'bookmarks'] = sorted(nodebookmarks[node])
             del nodebookmarks[node]
 
-        revisiondata = None
+        followingmeta = []
+        followingdata = []
 
         if b'revision' in fields:
             revisiondata = cl.revision(node, raw=True)
-            d[b'revisionsize'] = len(revisiondata)
+            followingmeta.append((b'revision', len(revisiondata)))
+            followingdata.append(revisiondata)
 
         # TODO make it possible for extensions to wrap a function or register
         # a handler to service custom fields.
 
+        if followingmeta:
+            d[b'fieldsfollowing'] = followingmeta
+
         yield d
 
-        if revisiondata is not None:
-            yield revisiondata
+        for extra in followingdata:
+            yield extra
 
     # If requested, send bookmarks from nodes that didn't have revision
     # data sent so receiver is aware of any bookmark updates.
@@ -865,25 +870,29 @@
         if b'parents' in fields:
             d[b'parents'] = store.parents(node)
 
+        followingmeta = []
+        followingdata = []
+
         if b'revision' in fields:
             assert delta is not None
             assert delta.flags == 0
             assert d[b'node'] == delta.node
 
             if delta.revision is not None:
-                revisiondata = delta.revision
-                d[b'revisionsize'] = len(revisiondata)
+                followingmeta.append((b'revision', len(delta.revision)))
+                followingdata.append(delta.revision)
             else:
                 d[b'deltabasenode'] = delta.basenode
-                revisiondata = delta.delta
-                d[b'deltasize'] = len(revisiondata)
-        else:
-            revisiondata = None
+                followingmeta.append((b'delta', len(delta.delta)))
+                followingdata.append(delta.delta)
+
+        if followingmeta:
+            d[b'fieldsfollowing'] = followingmeta
 
         yield d
 
-        if revisiondata is not None:
-            yield revisiondata
+        for extra in followingdata:
+            yield extra
 
     if deltas is not None:
         try:
@@ -1020,25 +1029,29 @@
         if b'parents' in fields:
             d[b'parents'] = store.parents(node)
 
+        followingmeta = []
+        followingdata = []
+
         if b'revision' in fields:
             assert delta is not None
             assert delta.flags == 0
             assert d[b'node'] == delta.node
 
             if delta.revision is not None:
-                revisiondata = delta.revision
-                d[b'revisionsize'] = len(revisiondata)
+                followingmeta.append((b'revision', len(delta.revision)))
+                followingdata.append(delta.revision)
             else:
                 d[b'deltabasenode'] = delta.basenode
-                revisiondata = delta.delta
-                d[b'deltasize'] = len(revisiondata)
-        else:
-            revisiondata = None
+                followingmeta.append((b'delta', len(delta.delta)))
+                followingdata.append(delta.delta)
+
+        if followingmeta:
+            d[b'fieldsfollowing'] = followingmeta
 
         yield d
 
-        if revisiondata is not None:
-            yield revisiondata
+        for extra in followingdata:
+            yield extra
 
     if deltas is not None:
         try: