1171 currentbase = self.revlog.deltaparent(currentbase) |
1177 currentbase = self.revlog.deltaparent(currentbase) |
1172 if self.revlog._lazydelta and currentbase == base: |
1178 if self.revlog._lazydelta and currentbase == base: |
1173 delta = revinfo.cachedelta[1] |
1179 delta = revinfo.cachedelta[1] |
1174 if delta is None: |
1180 if delta is None: |
1175 delta = self._builddeltadiff(base, revinfo, fh) |
1181 delta = self._builddeltadiff(base, revinfo, fh) |
1176 if debug_search: |
1182 if self._debug_search: |
1177 msg = b"DBG-DELTAS-SEARCH: uncompressed-delta-size=%d\n" |
1183 msg = b"DBG-DELTAS-SEARCH: uncompressed-delta-size=%d\n" |
1178 msg %= len(delta) |
1184 msg %= len(delta) |
1179 self._write_debug(msg) |
1185 self._write_debug(msg) |
1180 # snapshotdept need to be neither None nor 0 level snapshot |
1186 # snapshotdept need to be neither None nor 0 level snapshot |
1181 if revlog.upperboundcomp is not None and snapshotdepth: |
1187 if revlog.upperboundcomp is not None and snapshotdepth: |
1182 lowestrealisticdeltalen = len(delta) // revlog.upperboundcomp |
1188 lowestrealisticdeltalen = len(delta) // revlog.upperboundcomp |
1183 snapshotlimit = revinfo.textlen >> snapshotdepth |
1189 snapshotlimit = revinfo.textlen >> snapshotdepth |
1184 if debug_search: |
1190 if self._debug_search: |
1185 msg = b"DBG-DELTAS-SEARCH: projected-lower-size=%d\n" |
1191 msg = b"DBG-DELTAS-SEARCH: projected-lower-size=%d\n" |
1186 msg %= lowestrealisticdeltalen |
1192 msg %= lowestrealisticdeltalen |
1187 self._write_debug(msg) |
1193 self._write_debug(msg) |
1188 if snapshotlimit < lowestrealisticdeltalen: |
1194 if snapshotlimit < lowestrealisticdeltalen: |
1189 if debug_search: |
1195 if self._debug_search: |
1190 msg = b"DBG-DELTAS-SEARCH: DISCARDED (snapshot limit)\n" |
1196 msg = b"DBG-DELTAS-SEARCH: DISCARDED (snapshot limit)\n" |
1191 self._write_debug(msg) |
1197 self._write_debug(msg) |
1192 return None |
1198 return None |
1193 if revlog.length(base) < lowestrealisticdeltalen: |
1199 if revlog.length(base) < lowestrealisticdeltalen: |
1194 if debug_search: |
1200 if self._debug_search: |
1195 msg = b"DBG-DELTAS-SEARCH: DISCARDED (prev size)\n" |
1201 msg = b"DBG-DELTAS-SEARCH: DISCARDED (prev size)\n" |
1196 self._write_debug(msg) |
1202 self._write_debug(msg) |
1197 return None |
1203 return None |
1198 header, data = revlog.compress(delta) |
1204 header, data = revlog.compress(delta) |
1199 deltalen = len(header) + len(data) |
1205 deltalen = len(header) + len(data) |
1251 context. |
1257 context. |
1252 """ |
1258 """ |
1253 if target_rev is None: |
1259 if target_rev is None: |
1254 target_rev = len(self.revlog) |
1260 target_rev = len(self.revlog) |
1255 |
1261 |
1256 if not revinfo.textlen: |
1262 gather_debug = self._gather_debug |
1257 return self._fullsnapshotinfo(fh, revinfo, target_rev) |
1263 cachedelta = revinfo.cachedelta |
|
1264 revlog = self.revlog |
|
1265 p1r = p2r = None |
1258 |
1266 |
1259 if excluded_bases is None: |
1267 if excluded_bases is None: |
1260 excluded_bases = set() |
1268 excluded_bases = set() |
1261 |
1269 |
1262 # no delta for flag processor revision (see "candelta" for why) |
|
1263 # not calling candelta since only one revision needs test, also to |
|
1264 # avoid overhead fetching flags again. |
|
1265 if revinfo.flags & REVIDX_RAWTEXT_CHANGING_FLAGS: |
|
1266 return self._fullsnapshotinfo(fh, revinfo, target_rev) |
|
1267 |
|
1268 gather_debug = ( |
|
1269 self._write_debug is not None or self._debug_info is not None |
|
1270 ) |
|
1271 debug_search = self._write_debug is not None and self._debug_search |
|
1272 |
|
1273 if gather_debug: |
1270 if gather_debug: |
1274 start = util.timer() |
1271 start = util.timer() |
1275 |
1272 dbg = self._one_dbg_data() |
1276 # count the number of different delta we tried (for debug purpose) |
1273 dbg['revision'] = target_rev |
1277 dbg_try_count = 0 |
1274 target_revlog = b"UNKNOWN" |
1278 # count the number of "search round" we did. (for debug purpose) |
1275 target_type = self.revlog.target[0] |
1279 dbg_try_rounds = 0 |
1276 target_key = self.revlog.target[1] |
1280 dbg_type = b'unknown' |
1277 if target_type == KIND_CHANGELOG: |
1281 |
1278 target_revlog = b'CHANGELOG:' |
1282 cachedelta = revinfo.cachedelta |
1279 elif target_type == KIND_MANIFESTLOG: |
1283 p1 = revinfo.p1 |
1280 target_revlog = b'MANIFESTLOG:' |
1284 p2 = revinfo.p2 |
1281 if target_key: |
1285 revlog = self.revlog |
1282 target_revlog += b'%s:' % target_key |
1286 |
1283 elif target_type == KIND_FILELOG: |
1287 deltainfo = None |
1284 target_revlog = b'FILELOG:' |
1288 p1r, p2r = revlog.rev(p1), revlog.rev(p2) |
1285 if target_key: |
1289 |
1286 target_revlog += b'%s:' % target_key |
1290 if gather_debug: |
1287 dbg['target-revlog'] = target_revlog |
|
1288 p1r = revlog.rev(revinfo.p1) |
|
1289 p2r = revlog.rev(revinfo.p2) |
1291 if p1r != nullrev: |
1290 if p1r != nullrev: |
1292 p1_chain_len = revlog._chaininfo(p1r)[0] |
1291 p1_chain_len = revlog._chaininfo(p1r)[0] |
1293 else: |
1292 else: |
1294 p1_chain_len = -1 |
1293 p1_chain_len = -1 |
1295 if p2r != nullrev: |
1294 if p2r != nullrev: |
1296 p2_chain_len = revlog._chaininfo(p2r)[0] |
1295 p2_chain_len = revlog._chaininfo(p2r)[0] |
1297 else: |
1296 else: |
1298 p2_chain_len = -1 |
1297 p2_chain_len = -1 |
1299 if debug_search: |
1298 dbg['p1-chain-len'] = p1_chain_len |
|
1299 dbg['p2-chain-len'] = p2_chain_len |
|
1300 |
|
1301 # 1) if the revision is empty, no amount of delta can beat it |
|
1302 # |
|
1303 # 2) no delta for flag processor revision (see "candelta" for why) |
|
1304 # not calling candelta since only one revision needs test, also to |
|
1305 # avoid overhead fetching flags again. |
|
1306 if not revinfo.textlen or revinfo.flags & REVIDX_RAWTEXT_CHANGING_FLAGS: |
|
1307 deltainfo = self._fullsnapshotinfo(fh, revinfo, target_rev) |
|
1308 if gather_debug: |
|
1309 end = util.timer() |
|
1310 dbg['duration'] = end - start |
|
1311 dbg[ |
|
1312 'delta-base' |
|
1313 ] = deltainfo.base # pytype: disable=attribute-error |
|
1314 dbg['search_round_count'] = 0 |
|
1315 dbg['using-cached-base'] = False |
|
1316 dbg['delta_try_count'] = 0 |
|
1317 dbg['type'] = b"full" |
|
1318 dbg['snapshot-depth'] = 0 |
|
1319 self._dbg_process_data(dbg) |
|
1320 return deltainfo |
|
1321 |
|
1322 deltainfo = None |
|
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 |
|
1389 |
|
1390 # count the number of different delta we tried (for debug purpose) |
|
1391 dbg_try_count = 0 |
|
1392 # count the number of "search round" we did. (for debug purpose) |
|
1393 dbg_try_rounds = 0 |
|
1394 dbg_type = b'unknown' |
|
1395 |
|
1396 if p1r is None: |
|
1397 p1r = revlog.rev(revinfo.p1) |
|
1398 p2r = revlog.rev(revinfo.p2) |
|
1399 |
|
1400 if self._debug_search: |
1300 msg = b"DBG-DELTAS-SEARCH: SEARCH rev=%d\n" |
1401 msg = b"DBG-DELTAS-SEARCH: SEARCH rev=%d\n" |
1301 msg %= target_rev |
1402 msg %= target_rev |
1302 self._write_debug(msg) |
1403 self._write_debug(msg) |
1303 |
1404 |
1304 groups = _candidategroups( |
1405 groups = _candidategroups( |
1312 snapshot_cache=self._snapshot_cache, |
1413 snapshot_cache=self._snapshot_cache, |
1313 ) |
1414 ) |
1314 candidaterevs = next(groups) |
1415 candidaterevs = next(groups) |
1315 while candidaterevs is not None: |
1416 while candidaterevs is not None: |
1316 dbg_try_rounds += 1 |
1417 dbg_try_rounds += 1 |
1317 if debug_search: |
1418 if self._debug_search: |
1318 prev = None |
1419 prev = None |
1319 if deltainfo is not None: |
1420 if deltainfo is not None: |
1320 prev = deltainfo.base |
1421 prev = deltainfo.base |
1321 |
1422 |
1322 if ( |
1423 if ( |
1323 cachedelta is not None |
1424 cachedelta is not None |
1324 and len(candidaterevs) == 1 |
1425 and len(candidaterevs) == 1 |
1325 and cachedelta[0] in candidaterevs |
1426 and cachedelta[0] in candidaterevs |
1326 ): |
1427 ): |
1327 round_type = b"cached-delta" |
1428 round_type = b"cached-delta" |
1328 elif p1 in candidaterevs or p2 in candidaterevs: |
1429 elif p1r in candidaterevs or p2r in candidaterevs: |
1329 round_type = b"parents" |
1430 round_type = b"parents" |
1330 elif prev is not None and all(c < prev for c in candidaterevs): |
1431 elif prev is not None and all(c < prev for c in candidaterevs): |
1331 round_type = b"refine-down" |
1432 round_type = b"refine-down" |
1332 elif prev is not None and all(c > prev for c in candidaterevs): |
1433 elif prev is not None and all(c > prev for c in candidaterevs): |
1333 round_type = b"refine-up" |
1434 round_type = b"refine-up" |
1336 msg = b"DBG-DELTAS-SEARCH: ROUND #%d - %d candidates - %s\n" |
1437 msg = b"DBG-DELTAS-SEARCH: ROUND #%d - %d candidates - %s\n" |
1337 msg %= (dbg_try_rounds, len(candidaterevs), round_type) |
1438 msg %= (dbg_try_rounds, len(candidaterevs), round_type) |
1338 self._write_debug(msg) |
1439 self._write_debug(msg) |
1339 nominateddeltas = [] |
1440 nominateddeltas = [] |
1340 if deltainfo is not None: |
1441 if deltainfo is not None: |
1341 if debug_search: |
1442 if self._debug_search: |
1342 msg = ( |
1443 msg = ( |
1343 b"DBG-DELTAS-SEARCH: CONTENDER: rev=%d - length=%d\n" |
1444 b"DBG-DELTAS-SEARCH: CONTENDER: rev=%d - length=%d\n" |
1344 ) |
1445 ) |
1345 msg %= (deltainfo.base, deltainfo.deltalen) |
1446 msg %= (deltainfo.base, deltainfo.deltalen) |
1346 self._write_debug(msg) |
1447 self._write_debug(msg) |
1347 # if we already found a good delta, |
1448 # if we already found a good delta, |
1348 # challenge it against refined candidates |
1449 # challenge it against refined candidates |
1349 nominateddeltas.append(deltainfo) |
1450 nominateddeltas.append(deltainfo) |
1350 for candidaterev in candidaterevs: |
1451 for candidaterev in candidaterevs: |
1351 if debug_search: |
1452 if self._debug_search: |
1352 msg = b"DBG-DELTAS-SEARCH: CANDIDATE: rev=%d\n" |
1453 msg = b"DBG-DELTAS-SEARCH: CANDIDATE: rev=%d\n" |
1353 msg %= candidaterev |
1454 msg %= candidaterev |
1354 self._write_debug(msg) |
1455 self._write_debug(msg) |
1355 candidate_type = None |
1456 candidate_type = None |
1356 if candidaterev == p1: |
1457 if candidaterev == p1r: |
1357 candidate_type = b"p1" |
1458 candidate_type = b"p1" |
1358 elif candidaterev == p2: |
1459 elif candidaterev == p2r: |
1359 candidate_type = b"p2" |
1460 candidate_type = b"p2" |
1360 elif self.revlog.issnapshot(candidaterev): |
1461 elif self.revlog.issnapshot(candidaterev): |
1361 candidate_type = b"snapshot-%d" |
1462 candidate_type = b"snapshot-%d" |
1362 candidate_type %= self.revlog.snapshotdepth( |
1463 candidate_type %= self.revlog.snapshotdepth( |
1363 candidaterev |
1464 candidaterev |
1374 msg %= self.revlog.deltaparent(candidaterev) |
1475 msg %= self.revlog.deltaparent(candidaterev) |
1375 self._write_debug(msg) |
1476 self._write_debug(msg) |
1376 |
1477 |
1377 dbg_try_count += 1 |
1478 dbg_try_count += 1 |
1378 |
1479 |
1379 if debug_search: |
1480 if self._debug_search: |
1380 delta_start = util.timer() |
1481 delta_start = util.timer() |
1381 candidatedelta = self._builddeltainfo( |
1482 candidatedelta = self._builddeltainfo( |
1382 revinfo, |
1483 revinfo, |
1383 candidaterev, |
1484 candidaterev, |
1384 fh, |
1485 fh, |
1385 target_rev=target_rev, |
1486 target_rev=target_rev, |
1386 ) |
1487 ) |
1387 if debug_search: |
1488 if self._debug_search: |
1388 delta_end = util.timer() |
1489 delta_end = util.timer() |
1389 msg = b"DBG-DELTAS-SEARCH: delta-search-time=%f\n" |
1490 msg = b"DBG-DELTAS-SEARCH: delta-search-time=%f\n" |
1390 msg %= delta_end - delta_start |
1491 msg %= delta_end - delta_start |
1391 self._write_debug(msg) |
1492 self._write_debug(msg) |
1392 if candidatedelta is not None: |
1493 if candidatedelta is not None: |
1393 if is_good_delta_info(self.revlog, candidatedelta, revinfo): |
1494 if is_good_delta_info(self.revlog, candidatedelta, revinfo): |
1394 if debug_search: |
1495 if self._debug_search: |
1395 msg = b"DBG-DELTAS-SEARCH: DELTA: length=%d (GOOD)\n" |
1496 msg = b"DBG-DELTAS-SEARCH: DELTA: length=%d (GOOD)\n" |
1396 msg %= candidatedelta.deltalen |
1497 msg %= candidatedelta.deltalen |
1397 self._write_debug(msg) |
1498 self._write_debug(msg) |
1398 nominateddeltas.append(candidatedelta) |
1499 nominateddeltas.append(candidatedelta) |
1399 elif debug_search: |
1500 elif self._debug_search: |
1400 msg = b"DBG-DELTAS-SEARCH: DELTA: length=%d (BAD)\n" |
1501 msg = b"DBG-DELTAS-SEARCH: DELTA: length=%d (BAD)\n" |
1401 msg %= candidatedelta.deltalen |
1502 msg %= candidatedelta.deltalen |
1402 self._write_debug(msg) |
1503 self._write_debug(msg) |
1403 elif debug_search: |
1504 elif self._debug_search: |
1404 msg = b"DBG-DELTAS-SEARCH: NO-DELTA\n" |
1505 msg = b"DBG-DELTAS-SEARCH: NO-DELTA\n" |
1405 self._write_debug(msg) |
1506 self._write_debug(msg) |
1406 if nominateddeltas: |
1507 if nominateddeltas: |
1407 deltainfo = min(nominateddeltas, key=lambda x: x.deltalen) |
1508 deltainfo = min(nominateddeltas, key=lambda x: x.deltalen) |
1408 if deltainfo is not None: |
1509 if deltainfo is not None: |
1432 cachedelta is not None |
1533 cachedelta is not None |
1433 and dbg_try_rounds == 1 |
1534 and dbg_try_rounds == 1 |
1434 and dbg_try_count == 1 |
1535 and dbg_try_count == 1 |
1435 and deltainfo.base == cachedelta[0] |
1536 and deltainfo.base == cachedelta[0] |
1436 ) |
1537 ) |
1437 dbg = { |
1538 dbg['duration'] = end - start |
1438 'duration': end - start, |
1539 dbg[ |
1439 'revision': target_rev, |
1540 'delta-base' |
1440 'delta-base': deltainfo.base, # pytype: disable=attribute-error |
1541 ] = deltainfo.base # pytype: disable=attribute-error |
1441 'search_round_count': dbg_try_rounds, |
1542 dbg['search_round_count'] = dbg_try_rounds |
1442 'using-cached-base': used_cached, |
1543 dbg['using-cached-base'] = used_cached |
1443 'delta_try_count': dbg_try_count, |
1544 dbg['delta_try_count'] = dbg_try_count |
1444 'type': dbg_type, |
1545 dbg['type'] = dbg_type |
1445 'p1-chain-len': p1_chain_len, |
|
1446 'p2-chain-len': p2_chain_len, |
|
1447 } |
|
1448 if ( |
1546 if ( |
1449 deltainfo.snapshotdepth # pytype: disable=attribute-error |
1547 deltainfo.snapshotdepth # pytype: disable=attribute-error |
1450 is not None |
1548 is not None |
1451 ): |
1549 ): |
1452 dbg[ |
1550 dbg[ |
1453 'snapshot-depth' |
1551 'snapshot-depth' |
1454 ] = deltainfo.snapshotdepth # pytype: disable=attribute-error |
1552 ] = deltainfo.snapshotdepth # pytype: disable=attribute-error |
1455 else: |
1553 else: |
1456 dbg['snapshot-depth'] = 0 |
1554 dbg['snapshot-depth'] = 0 |
1457 target_revlog = b"UNKNOWN" |
1555 self._dbg_process_data(dbg) |
1458 target_type = self.revlog.target[0] |
|
1459 target_key = self.revlog.target[1] |
|
1460 if target_type == KIND_CHANGELOG: |
|
1461 target_revlog = b'CHANGELOG:' |
|
1462 elif target_type == KIND_MANIFESTLOG: |
|
1463 target_revlog = b'MANIFESTLOG:' |
|
1464 if target_key: |
|
1465 target_revlog += b'%s:' % target_key |
|
1466 elif target_type == KIND_FILELOG: |
|
1467 target_revlog = b'FILELOG:' |
|
1468 if target_key: |
|
1469 target_revlog += b'%s:' % target_key |
|
1470 dbg['target-revlog'] = target_revlog |
|
1471 |
|
1472 if self._debug_info is not None: |
|
1473 self._debug_info.append(dbg) |
|
1474 |
|
1475 if self._write_debug is not None: |
|
1476 msg = ( |
|
1477 b"DBG-DELTAS:" |
|
1478 b" %-12s" |
|
1479 b" rev=%d:" |
|
1480 b" delta-base=%d" |
|
1481 b" is-cached=%d" |
|
1482 b" - search-rounds=%d" |
|
1483 b" try-count=%d" |
|
1484 b" - delta-type=%-6s" |
|
1485 b" snap-depth=%d" |
|
1486 b" - p1-chain-length=%d" |
|
1487 b" p2-chain-length=%d" |
|
1488 b" - duration=%f" |
|
1489 b"\n" |
|
1490 ) |
|
1491 msg %= ( |
|
1492 dbg["target-revlog"], |
|
1493 dbg["revision"], |
|
1494 dbg["delta-base"], |
|
1495 dbg["using-cached-base"], |
|
1496 dbg["search_round_count"], |
|
1497 dbg["delta_try_count"], |
|
1498 dbg["type"], |
|
1499 dbg["snapshot-depth"], |
|
1500 dbg["p1-chain-len"], |
|
1501 dbg["p2-chain-len"], |
|
1502 dbg["duration"], |
|
1503 ) |
|
1504 self._write_debug(msg) |
|
1505 return deltainfo |
1556 return deltainfo |
|
1557 |
|
1558 def _one_dbg_data(self): |
|
1559 return { |
|
1560 'duration': None, |
|
1561 'revision': None, |
|
1562 'delta-base': None, |
|
1563 'search_round_count': None, |
|
1564 'using-cached-base': None, |
|
1565 'delta_try_count': None, |
|
1566 'type': None, |
|
1567 'p1-chain-len': None, |
|
1568 'p2-chain-len': None, |
|
1569 'snapshot-depth': None, |
|
1570 'target-revlog': None, |
|
1571 } |
|
1572 |
|
1573 def _dbg_process_data(self, dbg): |
|
1574 if self._debug_info is not None: |
|
1575 self._debug_info.append(dbg) |
|
1576 |
|
1577 if self._write_debug is not None: |
|
1578 msg = ( |
|
1579 b"DBG-DELTAS:" |
|
1580 b" %-12s" |
|
1581 b" rev=%d:" |
|
1582 b" delta-base=%d" |
|
1583 b" is-cached=%d" |
|
1584 b" - search-rounds=%d" |
|
1585 b" try-count=%d" |
|
1586 b" - delta-type=%-6s" |
|
1587 b" snap-depth=%d" |
|
1588 b" - p1-chain-length=%d" |
|
1589 b" p2-chain-length=%d" |
|
1590 b" - duration=%f" |
|
1591 b"\n" |
|
1592 ) |
|
1593 msg %= ( |
|
1594 dbg["target-revlog"], |
|
1595 dbg["revision"], |
|
1596 dbg["delta-base"], |
|
1597 dbg["using-cached-base"], |
|
1598 dbg["search_round_count"], |
|
1599 dbg["delta_try_count"], |
|
1600 dbg["type"], |
|
1601 dbg["snapshot-depth"], |
|
1602 dbg["p1-chain-len"], |
|
1603 dbg["p2-chain-len"], |
|
1604 dbg["duration"], |
|
1605 ) |
|
1606 self._write_debug(msg) |
1506 |
1607 |
1507 |
1608 |
1508 def delta_compression(default_compression_header, deltainfo): |
1609 def delta_compression(default_compression_header, deltainfo): |
1509 """return (COMPRESSION_MODE, deltainfo) |
1610 """return (COMPRESSION_MODE, deltainfo) |
1510 |
1611 |