Mercurial > hg
changeset 51346:2a333d791ecf
delta-find: introduce a base class for _DeltaSearch
This prepare the introduction of specialized the class in the next changesets.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sun, 07 Jan 2024 01:05:10 +0100 |
parents | 866ab9f447d4 |
children | 555826073625 |
files | mercurial/revlogutils/deltas.py |
diffstat | 1 files changed, 19 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revlogutils/deltas.py Sun Jan 07 03:23:24 2024 +0100 +++ b/mercurial/revlogutils/deltas.py Sun Jan 07 01:05:10 2024 +0100 @@ -8,6 +8,7 @@ """Helper class to compute deltas stored inside revlogs""" +import abc import collections import struct @@ -590,7 +591,7 @@ LIMIT_BASE2TEXT = 500 -class _DeltaSearch: +class _BaseDeltaSearch(abc.ABC): """perform the search of a good delta for a single revlog revision note: some of the deltacomputer.finddeltainfo logic should probably move @@ -633,9 +634,8 @@ self.tested = {nullrev} - self._candidates_iterator = self._candidate_groups() - self._last_good = None - self.current_group = self._candidates_iterator.send(self._last_good) + self.current_group = None + self._init_group() def is_good_delta_info(self, deltainfo): """Returns True if the given delta is good. @@ -764,6 +764,7 @@ """True when all possible candidate have been tested""" return self.current_group is None + @abc.abstractmethod def next_group(self, good_delta=None): """move to the next group to test @@ -775,6 +776,20 @@ If not revision remains to be, `self.done` will be True and `self.current_group` will be None. """ + pass + + @abc.abstractmethod + def _init_group(self): + pass + + +class _DeltaSearch(_BaseDeltaSearch): + def _init_group(self): + self._candidates_iterator = self._candidate_groups() + self._last_good = None + self.current_group = self._candidates_iterator.send(self._last_good) + + def next_group(self, good_delta=None): if good_delta is not None: self._last_good = good_delta.base self.current_group = self._candidates_iterator.send(self._last_good)