diff -r 8060257fd918 -r 22da1dc97281 mercurial/revlogutils/revlogv0.py --- a/mercurial/revlogutils/revlogv0.py Thu Sep 26 00:50:21 2024 +0200 +++ b/mercurial/revlogutils/revlogv0.py Wed Sep 25 17:18:40 2024 +0200 @@ -111,6 +111,22 @@ ) return INDEX_ENTRY_V0.pack(*e2) + def headrevs(self, excluded_revs=None): + count = len(self) + if not count: + return [node.nullrev] + # we won't iter over filtered rev so nobody is a head at start + ishead = [0] * (count + 1) + revs = range(count) + if excluded_revs is not None: + revs = (r for r in revs if r not in excluded_revs) + + for r in revs: + ishead[r] = 1 # I may be an head + e = self[r] + ishead[e[5]] = ishead[e[6]] = 0 # my parent are not + return [r for r, val in enumerate(ishead) if val] + def parse_index_v0(data, inline): s = INDEX_ENTRY_V0.size