# HG changeset patch # User Pierre-Yves David # Date 1704591518 -3600 # Node ID cc806f20d756f6ecc5f651cc20d3a54092a85e3a # Parent d58e14262587dc2c55ad88dc53df461f2aba93bc delta-find: explicitly track stage of the search Being more explicit about what we are doing is going to be useful. We actually start making use of it in later changesets. diff -r d58e14262587 -r cc806f20d756 mercurial/revlogutils/deltas.py --- a/mercurial/revlogutils/deltas.py Thu Nov 23 20:09:34 2023 +0100 +++ b/mercurial/revlogutils/deltas.py Sun Jan 07 02:38:38 2024 +0100 @@ -590,6 +590,20 @@ # consider these candidates. LIMIT_BASE2TEXT = 500 +### stage of the search, used for debug and to select and to adjust some logic. +# initial stage, next step is unknown +_STAGE_UNSPECIFIED = "unspecified" +# trying the cached delta +_STAGE_CACHED = "cached" +# trying delta based on parents +_STAGE_PARENTS = "parents" +# trying to build a valid snapshot of any level +_STAGE_SNAPSHOT = "snapshot" +# trying to build a delta based of the previous revision +_STAGE_PREV = "prev" +# trying to build a full snapshot +_STAGE_FULL = "full" + class _BaseDeltaSearch(abc.ABC): """perform the search of a good delta for a single revlog revision @@ -634,6 +648,7 @@ self.tested = {nullrev} + self.current_stage = _STAGE_UNSPECIFIED self.current_group = None self._init_group() @@ -790,7 +805,7 @@ """ def _init_group(self): - pass + self.current_stage = _STAGE_FULL def next_group(self, good_delta=None): pass @@ -804,9 +819,11 @@ """ def _init_group(self): + self.current_stage = _STAGE_PREV self.current_group = [self.target_rev - 1] def next_group(self, good_delta=None): + self.current_stage = _STAGE_FULL self.current_group = None @@ -1026,6 +1043,7 @@ ): # Assume what we received from the server is a good choice # build delta will reuse the cache + self.current_stage = _STAGE_CACHED good = yield (self.cachedelta[0],) if good is not None: yield None @@ -1039,6 +1057,7 @@ # If sparse revlog is enabled, we can try to refine the available # deltas if not self.revlog.delta_config.sparse_revlog: + self.current_stage = _STAGE_FULL yield None return @@ -1048,6 +1067,7 @@ and good not in (self.p1, self.p2) and self.revlog.issnapshot(good) ): + self.current_stage = _STAGE_SNAPSHOT # refine snapshot down previous = None while previous != good: @@ -1067,6 +1087,7 @@ ) good = yield children + self.current_stage = _STAGE_FULL yield None def _raw_groups(self): @@ -1084,6 +1105,7 @@ # exclude already lazy tested base if any parents = [p for p in (self.p1, self.p2) if p != nullrev] + self.current_stage = _STAGE_PARENTS if ( not self.revlog.delta_config.delta_both_parents and len(parents) == 2 @@ -1099,6 +1121,7 @@ yield parents if sparse and parents: + self.current_stage = _STAGE_SNAPSHOT # See if we can use an existing snapshot in the parent chains to # use as a base for a new intermediate-snapshot # @@ -1188,6 +1211,7 @@ if not sparse: # other approach failed try against prev to hopefully save us a # fulltext. + self.current_stage = _STAGE_PREV yield (prev,)