comparison mercurial/bundlerepo.py @ 45814:88d5abec8f61

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
author Joerg Sonnenberger <joerg@bec.de>
date Wed, 07 Oct 2020 03:00:01 +0200
parents 698e11f7be6a
children 89a2afe31e82
comparison
equal deleted inserted replaced
45813:57dc78861196 45814:88d5abec8f61
61 node, p1, p2, cs, deltabase, delta, flags = deltadata 61 node, p1, p2, cs, deltabase, delta, flags = deltadata
62 62
63 size = len(delta) 63 size = len(delta)
64 start = cgunpacker.tell() - size 64 start = cgunpacker.tell() - size
65 65
66 link = linkmapper(cs)
67 if self.index.has_node(node): 66 if self.index.has_node(node):
68 # this can happen if two branches make the same change 67 # this can happen if two branches make the same change
69 self.bundlerevs.add(self.index.rev(node)) 68 self.bundlerevs.add(self.index.rev(node))
70 continue 69 continue
70 if cs == node:
71 linkrev = nullrev
72 else:
73 linkrev = linkmapper(cs)
71 74
72 for p in (p1, p2): 75 for p in (p1, p2):
73 if not self.index.has_node(p): 76 if not self.index.has_node(p):
74 raise error.LookupError( 77 raise error.LookupError(
75 p, self.indexfile, _(b"unknown parent") 78 p, self.indexfile, _(b"unknown parent")
85 e = ( 88 e = (
86 revlog.offset_type(start, flags), 89 revlog.offset_type(start, flags),
87 size, 90 size,
88 -1, 91 -1,
89 baserev, 92 baserev,
90 link, 93 linkrev,
91 self.rev(p1), 94 self.rev(p1),
92 self.rev(p2), 95 self.rev(p2),
93 node, 96 node,
94 ) 97 )
95 self.index.append(e) 98 self.index.append(e)