--- a/mercurial/utils/storageutil.py Thu Apr 08 16:34:11 2021 +0200
+++ b/mercurial/utils/storageutil.py Sat Apr 10 11:27:40 2021 +0200
@@ -28,6 +28,10 @@
_nullhash = hashutil.sha1(sha1nodeconstants.nullid)
+# revision data contains extra metadata not part of the official digest
+# Only used in changegroup >= v4.
+CG_FLAG_SIDEDATA = 1
+
def hashrevisionsha1(text, p1, p2):
"""Compute the SHA-1 for revision data and its parents.
@@ -486,7 +490,7 @@
available.add(rev)
- sidedata = None
+ serialized_sidedata = None
if sidedata_helpers:
sidedata = store.sidedata(rev)
sidedata = run_sidedata_helpers(
@@ -495,18 +499,26 @@
sidedata=sidedata,
rev=rev,
)
- sidedata = sidedatamod.serialize_sidedata(sidedata)
+ if sidedata:
+ serialized_sidedata = sidedatamod.serialize_sidedata(sidedata)
+
+ flags = flagsfn(rev) if flagsfn else 0
+ protocol_flags = 0
+ if serialized_sidedata:
+ # Advertise that sidedata exists to the other side
+ protocol_flags |= CG_FLAG_SIDEDATA
yield resultcls(
node=node,
p1node=fnode(p1rev),
p2node=fnode(p2rev),
basenode=fnode(baserev),
- flags=flagsfn(rev) if flagsfn else 0,
+ flags=flags,
baserevisionsize=baserevisionsize,
revision=revision,
delta=delta,
- sidedata=sidedata,
+ sidedata=serialized_sidedata,
+ protocol_flags=protocol_flags,
)
prevrev = rev