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): |