mercurial/revlogutils/deltas.py
changeset 51357 99869dcf3ba0
parent 51356 a224ce5694b3
child 51506 e7bbeaa4f0a7
equal deleted inserted replaced
51356:a224ce5694b3 51357:99869dcf3ba0
   849             self.tested.update(self.current_group)
   849             self.tested.update(self.current_group)
   850 
   850 
   851     def next_group(self, good_delta=None):
   851     def next_group(self, good_delta=None):
   852         old_good = self._last_good
   852         old_good = self._last_good
   853         if good_delta is not None:
   853         if good_delta is not None:
   854             self._last_good = good_delta.base
   854             self._last_good = good_delta
   855         if self.current_stage == _STAGE_CACHED and good_delta is not None:
   855         if self.current_stage == _STAGE_CACHED and good_delta is not None:
   856             # the cache is good, let us use the cache as requested
   856             # the cache is good, let us use the cache as requested
   857             self._candidates_iterator = None
   857             self._candidates_iterator = None
   858             self._internal_group = None
   858             self._internal_group = None
   859             self._internal_idx = None
   859             self._internal_idx = None
  1211         for candidates in groups:
  1211         for candidates in groups:
  1212             good = yield candidates
  1212             good = yield candidates
  1213             if good is not None:
  1213             if good is not None:
  1214                 break
  1214                 break
  1215         # if we have a refinable value, try to refine it
  1215         # if we have a refinable value, try to refine it
  1216         if (
  1216         if good is not None and good.snapshotdepth is not None:
  1217             good is not None
       
  1218             and good not in (self.p1, self.p2)
       
  1219             and self.revlog.issnapshot(good)
       
  1220         ):
       
  1221             assert self.current_stage == _STAGE_SNAPSHOT
  1217             assert self.current_stage == _STAGE_SNAPSHOT
  1222             # refine snapshot down
  1218             # refine snapshot down
  1223             previous = None
  1219             previous = None
  1224             while previous != good:
  1220             while previous != good:
  1225                 previous = good
  1221                 previous = good
  1226                 base = self.revlog.deltaparent(good)
  1222                 base = self.revlog.deltaparent(good.base)
  1227                 if base == nullrev:
  1223                 if base == nullrev:
  1228                     break
  1224                     break
  1229                 good = yield (base,)
  1225                 good = yield (base,)
  1230             # refine snapshot up
  1226             # refine snapshot up
  1231             if not self.snapshot_cache.snapshots:
  1227             if not self.snapshot_cache.snapshots:
  1232                 self.snapshot_cache.update(self.revlog, good + 1)
  1228                 self.snapshot_cache.update(self.revlog, good.base + 1)
  1233             previous = None
  1229             previous = None
  1234             while good != previous:
  1230             while good != previous:
  1235                 previous = good
  1231                 previous = good
  1236                 children = tuple(
  1232                 children = tuple(
  1237                     sorted(c for c in self.snapshot_cache.snapshots[good])
  1233                     sorted(c for c in self.snapshot_cache.snapshots[good.base])
  1238                 )
  1234                 )
  1239                 good = yield children
  1235                 good = yield children
  1240         yield None
  1236         yield None
  1241 
  1237 
  1242     def _iter_groups(self):
  1238     def _iter_groups(self):