mercurial/exchangev2.py
changeset 39819 d059cb669632
parent 39657 aa7e312375cf
child 40036 7a347d362a45
--- a/mercurial/exchangev2.py	Mon Sep 17 11:54:00 2018 -0700
+++ b/mercurial/exchangev2.py	Thu Sep 20 12:57:23 2018 -0700
@@ -167,11 +167,16 @@
             # TODO add mechanism for extensions to examine records so they
             # can siphon off custom data fields.
 
+            extrafields = {}
+
+            for field, size in cset.get(b'fieldsfollowing', []):
+                extrafields[field] = next(objs)
+
             # Some entries might only be metadata only updates.
-            if b'revisionsize' not in cset:
+            if b'revision' not in extrafields:
                 continue
 
-            data = next(objs)
+            data = extrafields[b'revision']
 
             yield (
                 node,
@@ -227,12 +232,17 @@
         for manifest in objs:
             node = manifest[b'node']
 
-            if b'deltasize' in manifest:
+            extrafields = {}
+
+            for field, size in manifest.get(b'fieldsfollowing', []):
+                extrafields[field] = next(objs)
+
+            if b'delta' in extrafields:
                 basenode = manifest[b'deltabasenode']
-                delta = next(objs)
-            elif b'revisionsize' in manifest:
+                delta = extrafields[b'delta']
+            elif b'revision' in extrafields:
                 basenode = nullid
-                revision = next(objs)
+                revision = extrafields[b'revision']
                 delta = mdiff.trivialdiffheader(len(revision)) + revision
             else:
                 continue
@@ -331,12 +341,17 @@
         for filerevision in objs:
             node = filerevision[b'node']
 
-            if b'deltasize' in filerevision:
+            extrafields = {}
+
+            for field, size in filerevision.get(b'fieldsfollowing', []):
+                extrafields[field] = next(objs)
+
+            if b'delta' in extrafields:
                 basenode = filerevision[b'deltabasenode']
-                delta = next(objs)
-            elif b'revisionsize' in filerevision:
+                delta = extrafields[b'delta']
+            elif b'revision' in extrafields:
                 basenode = nullid
-                revision = next(objs)
+                revision = extrafields[b'revision']
                 delta = mdiff.trivialdiffheader(len(revision)) + revision
             else:
                 continue