Mercurial > public > mercurial-scm > hg
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) |