Show More
@@ -489,45 +489,23 b' def isgooddeltainfo(revlog, deltainfo, r' | |||
|
489 | 489 | # deltas we need to apply -- bounding it limits the amount of CPU |
|
490 | 490 | # we consume. |
|
491 | 491 | |
|
492 | if revlog._sparserevlog: | |
|
493 | # As sparse-read will be used, we can consider that the distance, | |
|
494 | # instead of being the span of the whole chunk, | |
|
495 | # is the span of the largest read chunk | |
|
496 | base = deltainfo.base | |
|
497 | ||
|
498 | if base != nullrev: | |
|
499 | deltachain = revlog._deltachain(base)[0] | |
|
500 | else: | |
|
501 | deltachain = [] | |
|
502 | ||
|
503 | # search for the first non-snapshot revision | |
|
504 | for idx, r in enumerate(deltachain): | |
|
505 | if not revlog.issnapshot(r): | |
|
506 | break | |
|
507 | deltachain = deltachain[idx:] | |
|
508 | chunks = slicechunk(revlog, deltachain, deltainfo) | |
|
509 | all_span = [segmentspan(revlog, revs, deltainfo) | |
|
510 | for revs in chunks] | |
|
511 | distance = max(all_span) | |
|
512 | else: | |
|
513 | distance = deltainfo.distance | |
|
514 | ||
|
515 | 492 | textlen = revinfo.textlen |
|
516 | 493 | defaultmax = textlen * 4 |
|
517 | 494 | maxdist = revlog._maxdeltachainspan |
|
518 | 495 | if not maxdist: |
|
519 | maxdist = distance # ensure the conditional pass | |
|
496 | maxdist = deltainfo.distance # ensure the conditional pass | |
|
520 | 497 | maxdist = max(maxdist, defaultmax) |
|
521 | if revlog._sparserevlog and maxdist < revlog._srmingapsize: | |
|
522 | # In multiple place, we are ignoring irrelevant data range below a | |
|
523 | # certain size. Be also apply this tradeoff here and relax span | |
|
524 | # constraint for small enought content. | |
|
525 | maxdist = revlog._srmingapsize | |
|
526 | 498 | |
|
527 | 499 | # Bad delta from read span: |
|
528 | 500 | # |
|
529 | 501 | # If the span of data read is larger than the maximum allowed. |
|
530 | if maxdist < distance: | |
|
502 | # | |
|
503 | # In the sparse-revlog case, we rely on the associated "sparse reading" | |
|
504 | # to avoid issue related to the span of data. In theory, it would be | |
|
505 | # possible to build pathological revlog where delta pattern would lead | |
|
506 | # to too many reads. However, they do not happen in practice at all. So | |
|
507 | # we skip the span check entirely. | |
|
508 | if not revlog._sparserevlog and maxdist < deltainfo.distance: | |
|
531 | 509 | return False |
|
532 | 510 | |
|
533 | 511 | # Bad delta from new delta size: |
General Comments 0
You need to be logged in to leave comments.
Login now