bundlerepo: don't insert index tuples with full nodes as linkrev
authorJoerg Sonnenberger <joerg@bec.de>
Wed, 07 Oct 2020 03:00:01 +0200
changeset 45814 88d5abec8f61
parent 45813 57dc78861196
child 45815 b6f4a1df91bd
bundlerepo: don't insert index tuples with full nodes as linkrev The index format has a documented format and latter changes will start to enforce the field types. The bundlerepo uses full nodes for the linkrev field when it should be using revision numbers. Use the link mapping to resolve them, except in the special case of self-references. Those are actually indications of a missing linkrev. Differential Revision: https://phab.mercurial-scm.org/D9160
mercurial/bundlerepo.py
--- a/mercurial/bundlerepo.py	Tue Oct 20 15:09:08 2020 +0200
+++ b/mercurial/bundlerepo.py	Wed Oct 07 03:00:01 2020 +0200
@@ -63,11 +63,14 @@
             size = len(delta)
             start = cgunpacker.tell() - size
 
-            link = linkmapper(cs)
             if self.index.has_node(node):
                 # this can happen if two branches make the same change
                 self.bundlerevs.add(self.index.rev(node))
                 continue
+            if cs == node:
+                linkrev = nullrev
+            else:
+                linkrev = linkmapper(cs)
 
             for p in (p1, p2):
                 if not self.index.has_node(p):
@@ -87,7 +90,7 @@
                 size,
                 -1,
                 baserev,
-                link,
+                linkrev,
                 self.rev(p1),
                 self.rev(p2),
                 node,