Mercurial > hg
changeset 51321:c83074405276
delta-find: move `_refinedgroups` on the `_DeltaSearch` object
Moving more code before doing more logic changes.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 20 Nov 2023 04:53:11 +0100 |
parents | c82e03b102a6 |
children | a227e061bb4b |
files | mercurial/revlogutils/deltas.py |
diffstat | 1 files changed, 68 insertions(+), 65 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revlogutils/deltas.py Mon Nov 20 04:44:40 2023 +0100 +++ b/mercurial/revlogutils/deltas.py Mon Nov 20 04:53:11 2023 +0100 @@ -741,13 +741,7 @@ group_chunk_size = self.revlog.delta_config.candidate_group_chunk_size tested = {nullrev} - candidates = _refinedgroups( - self.revlog, - self.p1, - self.p2, - self.cachedelta, - snapshot_cache=self.snapshot_cache, - ) + candidates = self._refined_groups() while True: temptative = candidates.send(good) if temptative is None: @@ -869,70 +863,79 @@ yield None + def _refined_groups(self): + good = None + # First we try to reuse a the delta contained in the bundle. (or from + # the source revlog) + # + # This logic only applies to general delta repositories and can be + # disabled through configuration. Disabling reuse source delta is + # useful when we want to make sure we recomputed "optimal" deltas. + debug_info = None + if ( + self.cachedelta is not None + and self.cachedelta[2] > DELTA_BASE_REUSE_NO + ): + # Assume what we received from the server is a good choice + # build delta will reuse the cache + if debug_info is not None: + debug_info['cached-delta.tested'] += 1 + good = yield (self.cachedelta[0],) + if good is not None: + if debug_info is not None: + debug_info['cached-delta.accepted'] += 1 + yield None + return + if self.snapshot_cache is None: + self.snapshot_cache = SnapshotCache() + groups = _rawgroups( + self.revlog, + self.p1, + self.p2, + self.cachedelta, + self.snapshot_cache, + ) + for candidates in groups: + good = yield candidates + if good is not None: + break -def _refinedgroups(revlog, p1, p2, cachedelta, snapshot_cache=None): - good = None - # First we try to reuse a the delta contained in the bundle. - # (or from the source revlog) - # - # This logic only applies to general delta repositories and can be disabled - # through configuration. Disabling reuse source delta is useful when - # we want to make sure we recomputed "optimal" deltas. - debug_info = None - if cachedelta is not None and cachedelta[2] > DELTA_BASE_REUSE_NO: - # Assume what we received from the server is a good choice - # build delta will reuse the cache - if debug_info is not None: - debug_info['cached-delta.tested'] += 1 - good = yield (cachedelta[0],) - if good is not None: - if debug_info is not None: - debug_info['cached-delta.accepted'] += 1 + # If sparse revlog is enabled, we can try to refine the available + # deltas + if not self.revlog.delta_config.sparse_revlog: yield None return - if snapshot_cache is None: - snapshot_cache = SnapshotCache() - groups = _rawgroups( - revlog, - p1, - p2, - cachedelta, - snapshot_cache, - ) - for candidates in groups: - good = yield candidates - if good is not None: - break - - # If sparse revlog is enabled, we can try to refine the available deltas - if not revlog.delta_config.sparse_revlog: - yield None - return - # if we have a refinable value, try to refine it - if good is not None and good not in (p1, p2) and revlog.issnapshot(good): - # refine snapshot down - previous = None - while previous != good: - previous = good - base = revlog.deltaparent(good) - if base == nullrev: - break - good = yield (base,) - # refine snapshot up - if not snapshot_cache.snapshots: - snapshot_cache.update(revlog, good + 1) - previous = None - while good != previous: - previous = good - children = tuple(sorted(c for c in snapshot_cache.snapshots[good])) - good = yield children + # if we have a refinable value, try to refine it + if ( + good is not None + and good not in (self.p1, self.p2) + and self.revlog.issnapshot(good) + ): + # refine snapshot down + previous = None + while previous != good: + previous = good + base = self.revlog.deltaparent(good) + if base == nullrev: + break + good = yield (base,) + # refine snapshot up + if not self.snapshot_cache.snapshots: + self.snapshot_cache.update(self.revlog, good + 1) + previous = None + while good != previous: + previous = good + children = tuple( + sorted(c for c in self.snapshot_cache.snapshots[good]) + ) + good = yield children - if debug_info is not None: - if good is None: - debug_info['no-solution'] += 1 + if debug_info is not None: + if good is None: + debug_info['no-solution'] += 1 - yield None + yield None def _rawgroups(revlog, p1, p2, cachedelta, snapshot_cache=None):