comparison mercurial/revlog.py @ 51392:a0d88b021a98

unbundle: faster computation of changed heads To compute the set of changed heads it's sufficient to look at the recent commits, instead of looking at all heads currently in existence.
author Arseniy Alekseyev <aalekseyev@janestreet.com>
date Thu, 21 Dec 2023 17:38:04 +0000
parents 0106df85efd5
children def497c75351
comparison
equal deleted inserted replaced
51391:3a7ef1398385 51392:a0d88b021a98
130 _zlibdecompress = zlib.decompress 130 _zlibdecompress = zlib.decompress
131 131
132 # max size of inline data embedded into a revlog 132 # max size of inline data embedded into a revlog
133 _maxinline = 131072 133 _maxinline = 131072
134 134
135
135 # Flag processors for REVIDX_ELLIPSIS. 136 # Flag processors for REVIDX_ELLIPSIS.
136 def ellipsisreadprocessor(rl, text): 137 def ellipsisreadprocessor(rl, text):
137 return text, False 138 return text, False
138 139
139 140
1575 (self._datafile, data_stream, data_size), 1576 (self._datafile, data_stream, data_size),
1576 (self._indexfile, index_stream, index_size), 1577 (self._indexfile, index_stream, index_size),
1577 ] 1578 ]
1578 1579
1579 def _loadindex(self, docket=None): 1580 def _loadindex(self, docket=None):
1580
1581 new_header, mmapindexthreshold, force_nodemap = self._init_opts() 1581 new_header, mmapindexthreshold, force_nodemap = self._init_opts()
1582 1582
1583 if self.postfix is not None: 1583 if self.postfix is not None:
1584 entry_point = b'%s.i.%s' % (self.radix, self.postfix) 1584 entry_point = b'%s.i.%s' % (self.radix, self.postfix)
1585 elif self._trypending and self.opener.exists(b'%s.i.a' % self.radix): 1585 elif self._trypending and self.opener.exists(b'%s.i.a' % self.radix):
2343 return self._headrevs() 2343 return self._headrevs()
2344 if rustdagop is not None and self.index.rust_ext_compat: 2344 if rustdagop is not None and self.index.rust_ext_compat:
2345 return rustdagop.headrevs(self.index, revs) 2345 return rustdagop.headrevs(self.index, revs)
2346 return dagop.headrevs(revs, self._uncheckedparentrevs) 2346 return dagop.headrevs(revs, self._uncheckedparentrevs)
2347 2347
2348 def headrevsdiff(self, start, stop):
2349 try:
2350 return self.index.headrevsdiff(start, stop)
2351 except AttributeError:
2352 return dagop.headrevsdiff(self._uncheckedparentrevs, start, stop)
2353
2348 def computephases(self, roots): 2354 def computephases(self, roots):
2349 return self.index.computephasesmapsets(roots) 2355 return self.index.computephasesmapsets(roots)
2350 2356
2351 def _headrevs(self): 2357 def _headrevs(self):
2352 count = len(self) 2358 count = len(self)
2389 revs = dagop.headrevssubset( 2395 revs = dagop.headrevssubset(
2390 self.revs, self.parentrevs, startrev=start, stoprevs=stoprevs 2396 self.revs, self.parentrevs, startrev=start, stoprevs=stoprevs
2391 ) 2397 )
2392 2398
2393 return [self.node(rev) for rev in revs] 2399 return [self.node(rev) for rev in revs]
2400
2401 def diffheads(self, start, stop):
2402 """return the nodes that make up the difference between
2403 heads of revs before `start` and heads of revs before `stop`"""
2404 removed, added = self.headrevsdiff(start, stop)
2405 return [self.node(r) for r in removed], [self.node(r) for r in added]
2394 2406
2395 def children(self, node): 2407 def children(self, node):
2396 """find the children of a given node""" 2408 """find the children of a given node"""
2397 c = [] 2409 c = []
2398 p = self.rev(node) 2410 p = self.rev(node)