comparison mercurial/revlog.py @ 46779:49fd21f32695

revlog: guarantee that p1 != null if a non-null parent exists This change does not affect the hashing (which already did this transformation), but can change the log output in the rare case where this behavior was observed in repositories. The change can simplify iteration code where regular changesets and merges are distinct branches. Differential Revision: https://phab.mercurial-scm.org/D10150
author Joerg Sonnenberger <joerg@bec.de>
date Wed, 10 Mar 2021 18:09:21 +0100
parents ba8e508a8e69
children 6266d19556ad
comparison
equal deleted inserted replaced
46778:066b8d8f75b8 46779:49fd21f32695
906 entry = self.index[rev] 906 entry = self.index[rev]
907 except IndexError: 907 except IndexError:
908 if rev == wdirrev: 908 if rev == wdirrev:
909 raise error.WdirUnsupported 909 raise error.WdirUnsupported
910 raise 910 raise
911 911 if entry[5] == nullrev:
912 return entry[5], entry[6] 912 return entry[6], entry[5]
913 else:
914 return entry[5], entry[6]
913 915
914 # fast parentrevs(rev) where rev isn't filtered 916 # fast parentrevs(rev) where rev isn't filtered
915 _uncheckedparentrevs = parentrevs 917 _uncheckedparentrevs = parentrevs
916 918
917 def node(self, rev): 919 def node(self, rev):
928 return self.start(rev) + self.length(rev) 930 return self.start(rev) + self.length(rev)
929 931
930 def parents(self, node): 932 def parents(self, node):
931 i = self.index 933 i = self.index
932 d = i[self.rev(node)] 934 d = i[self.rev(node)]
933 return i[d[5]][7], i[d[6]][7] # map revisions to nodes inline 935 # inline node() to avoid function call overhead
936 if d[5] == nullid:
937 return i[d[6]][7], i[d[5]][7]
938 else:
939 return i[d[5]][7], i[d[6]][7]
934 940
935 def chainlen(self, rev): 941 def chainlen(self, rev):
936 return self._chaininfo(rev)[0] 942 return self._chaininfo(rev)[0]
937 943
938 def _chaininfo(self, rev): 944 def _chaininfo(self, rev):