1260 target_rev = len(self.revlog) |
1260 target_rev = len(self.revlog) |
1261 |
1261 |
1262 gather_debug = self._gather_debug |
1262 gather_debug = self._gather_debug |
1263 cachedelta = revinfo.cachedelta |
1263 cachedelta = revinfo.cachedelta |
1264 revlog = self.revlog |
1264 revlog = self.revlog |
1265 |
|
1266 p1r = p2r = None |
1265 p1r = p2r = None |
|
1266 |
|
1267 if excluded_bases is None: |
|
1268 excluded_bases = set() |
1267 |
1269 |
1268 if gather_debug: |
1270 if gather_debug: |
1269 start = util.timer() |
1271 start = util.timer() |
1270 dbg = self._one_dbg_data() |
1272 dbg = self._one_dbg_data() |
1271 dbg['revision'] = target_rev |
1273 dbg['revision'] = target_rev |
1308 dbg['duration'] = end - start |
1310 dbg['duration'] = end - start |
1309 dbg[ |
1311 dbg[ |
1310 'delta-base' |
1312 'delta-base' |
1311 ] = deltainfo.base # pytype: disable=attribute-error |
1313 ] = deltainfo.base # pytype: disable=attribute-error |
1312 dbg['search_round_count'] = 0 |
1314 dbg['search_round_count'] = 0 |
1313 dbg['using-cached-base'] = True |
1315 dbg['using-cached-base'] = False |
1314 dbg['delta_try_count'] = 0 |
1316 dbg['delta_try_count'] = 0 |
1315 dbg['type'] = b"full" |
1317 dbg['type'] = b"full" |
1316 dbg['snapshot-depth'] = 0 |
1318 dbg['snapshot-depth'] = 0 |
1317 self._dbg_process_data(dbg) |
1319 self._dbg_process_data(dbg) |
1318 return deltainfo |
1320 return deltainfo |
1319 |
1321 |
1320 if excluded_bases is None: |
1322 deltainfo = None |
1321 excluded_bases = set() |
1323 |
|
1324 # If this source delta are to be forcibly reuse, let us comply early. |
|
1325 if ( |
|
1326 revlog._generaldelta |
|
1327 and revinfo.cachedelta is not None |
|
1328 and revinfo.cachedelta[2] == DELTA_BASE_REUSE_FORCE |
|
1329 ): |
|
1330 base = revinfo.cachedelta[0] |
|
1331 if base == nullrev: |
|
1332 dbg_type = b"full" |
|
1333 deltainfo = self._fullsnapshotinfo(fh, revinfo, target_rev) |
|
1334 if gather_debug: |
|
1335 snapshotdepth = 0 |
|
1336 elif base not in excluded_bases: |
|
1337 delta = revinfo.cachedelta[1] |
|
1338 header, data = revlog.compress(delta) |
|
1339 deltalen = len(header) + len(data) |
|
1340 if gather_debug: |
|
1341 offset = revlog.end(len(revlog) - 1) |
|
1342 chainbase = revlog.chainbase(base) |
|
1343 distance = deltalen + offset - revlog.start(chainbase) |
|
1344 chainlen, compresseddeltalen = revlog._chaininfo(base) |
|
1345 chainlen += 1 |
|
1346 compresseddeltalen += deltalen |
|
1347 if base == p1r or base == p2r: |
|
1348 dbg_type = b"delta" |
|
1349 snapshotdepth = None |
|
1350 elif not revlog.issnapshot(base): |
|
1351 snapshotdepth = None |
|
1352 else: |
|
1353 dbg_type = b"snapshot" |
|
1354 snapshotdepth = revlog.snapshotdepth(base) + 1 |
|
1355 else: |
|
1356 distance = None |
|
1357 chainbase = None |
|
1358 chainlen = None |
|
1359 compresseddeltalen = None |
|
1360 snapshotdepth = None |
|
1361 deltainfo = _deltainfo( |
|
1362 distance=distance, |
|
1363 deltalen=deltalen, |
|
1364 data=(header, data), |
|
1365 base=base, |
|
1366 chainbase=chainbase, |
|
1367 chainlen=chainlen, |
|
1368 compresseddeltalen=compresseddeltalen, |
|
1369 snapshotdepth=snapshotdepth, |
|
1370 ) |
|
1371 |
|
1372 if deltainfo is not None: |
|
1373 if gather_debug: |
|
1374 end = util.timer() |
|
1375 dbg['duration'] = end - start |
|
1376 dbg[ |
|
1377 'delta-base' |
|
1378 ] = deltainfo.base # pytype: disable=attribute-error |
|
1379 dbg['search_round_count'] = 0 |
|
1380 dbg['using-cached-base'] = True |
|
1381 dbg['delta_try_count'] = 0 |
|
1382 dbg['type'] = b"full" |
|
1383 if snapshotdepth is None: |
|
1384 dbg['snapshot-depth'] = 0 |
|
1385 else: |
|
1386 dbg['snapshot-depth'] = snapshotdepth |
|
1387 self._dbg_process_data(dbg) |
|
1388 return deltainfo |
1322 |
1389 |
1323 # count the number of different delta we tried (for debug purpose) |
1390 # count the number of different delta we tried (for debug purpose) |
1324 dbg_try_count = 0 |
1391 dbg_try_count = 0 |
1325 # count the number of "search round" we did. (for debug purpose) |
1392 # count the number of "search round" we did. (for debug purpose) |
1326 dbg_try_rounds = 0 |
1393 dbg_try_rounds = 0 |
1327 dbg_type = b'unknown' |
1394 dbg_type = b'unknown' |
1328 |
1395 |
1329 deltainfo = None |
|
1330 if p1r is None: |
1396 if p1r is None: |
1331 p1r = revlog.rev(revinfo.p1) |
1397 p1r = revlog.rev(revinfo.p1) |
1332 p2r = revlog.rev(revinfo.p2) |
1398 p2r = revlog.rev(revinfo.p2) |
1333 |
1399 |
1334 if self._debug_search: |
1400 if self._debug_search: |