Mercurial > hg
changeset 51357:d7e2acdd50ba
delta-find: split the _DeltaSearch class in two
We now have things sliced small enough to have two class that use different
`_iter_groups` implementation to encode their different logic.
The filtering code remains to be moved, but I would rather keep this changeset
simple and move them in the next.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sun, 07 Jan 2024 04:39:18 +0100 |
parents | 701caeabbee7 |
children | 383e99f6bc99 |
files | mercurial/revlogutils/deltas.py |
diffstat | 1 files changed, 30 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revlogutils/deltas.py Thu Nov 23 22:40:11 2023 +0100 +++ b/mercurial/revlogutils/deltas.py Sun Jan 07 04:39:18 2024 +0100 @@ -828,11 +828,8 @@ self.current_group = None -class _DeltaSearch(_BaseDeltaSearch): - """Generic delta search variants - - (expect this to be split further) - """ +class _GeneralDeltaSearch(_BaseDeltaSearch): + """Delta search variant for general-delta repository""" def _init_group(self): # Why search for delta base if we cannot use a delta base ? @@ -1080,6 +1077,21 @@ self.current_stage = _STAGE_PREV yield (self.target_rev - 1,) + def _iter_groups(self): + good = None + for group in self._iter_parents(): + good = yield group + if good is not None: + break + else: + assert good is None + yield from self._iter_prev() + yield None + + +class _SparseDeltaSearch(_GeneralDeltaSearch): + """Delta search variants for sparse-revlog""" + def _iter_snapshots_base(self): assert self.revlog.delta_config.sparse_revlog assert self.current_stage == _STAGE_SNAPSHOT @@ -1217,16 +1229,14 @@ break else: assert good is None - if self.revlog.delta_config.sparse_revlog: - # If sparse revlog is enabled, we can try to refine the - # available deltas - iter_snap = self._iter_snapshots() - group = iter_snap.send(None) - while group is not None: - good = yield group - group = iter_snap.send(good) - else: - yield from self._iter_prev() + assert self.revlog.delta_config.sparse_revlog + # If sparse revlog is enabled, we can try to refine the + # available deltas + iter_snap = self._iter_snapshots() + group = iter_snap.send(None) + while group is not None: + good = yield group + group = iter_snap.send(good) yield None @@ -1605,11 +1615,13 @@ # should we try to build a delta? if not (len(self.revlog) and self.revlog._storedeltachains): search_cls = _NoDeltaSearch - elif not self.revlog.delta_config.general_delta: + elif self.revlog.delta_config.sparse_revlog: + search_cls = _SparseDeltaSearch + elif self.revlog.delta_config.general_delta: + search_cls = _GeneralDeltaSearch + else: # before general delta, there is only one possible delta base search_cls = _PrevDeltaSearch - else: - search_cls = _DeltaSearch search = search_cls( self.revlog,