Show More
@@ -262,13 +262,17 b' def _trimchunk(revlog, revs, startidx, e' | |||
|
262 | 262 | if endidx is None: |
|
263 | 263 | endidx = len(revs) |
|
264 | 264 | |
|
265 | # Trim empty revs at the end, but never the very first revision of a chain | |
|
266 | while endidx > 1 and endidx > startidx and length(revs[endidx - 1]) == 0: | |
|
267 | endidx -= 1 | |
|
265 | # If we have a non-emtpy delta candidate, there are nothing to trim | |
|
266 | if revs[endidx - 1] < len(revlog): | |
|
267 | # Trim empty revs at the end, except the very first revision of a chain | |
|
268 | while (endidx > 1 | |
|
269 | and endidx > startidx | |
|
270 | and length(revs[endidx - 1]) == 0): | |
|
271 | endidx -= 1 | |
|
268 | 272 | |
|
269 | 273 | return revs[startidx:endidx] |
|
270 | 274 | |
|
271 | def _segmentspan(revlog, revs): | |
|
275 | def _segmentspan(revlog, revs, deltainfo=None): | |
|
272 | 276 | """Get the byte span of a segment of revisions |
|
273 | 277 | |
|
274 | 278 | revs is a sorted array of revision numbers |
@@ -294,7 +298,14 b' def _segmentspan(revlog, revs):' | |||
|
294 | 298 | """ |
|
295 | 299 | if not revs: |
|
296 | 300 | return 0 |
|
297 | return revlog.end(revs[-1]) - revlog.start(revs[0]) | |
|
301 | if deltainfo is not None and len(revlog) <= revs[-1]: | |
|
302 | if len(revs) == 1: | |
|
303 | return deltainfo.deltalen | |
|
304 | offset = revlog.end(len(revlog) - 1) | |
|
305 | end = deltainfo.deltalen + offset | |
|
306 | else: | |
|
307 | end = revlog.end(revs[-1]) | |
|
308 | return end - revlog.start(revs[0]) | |
|
298 | 309 | |
|
299 | 310 | def _slicechunk(revlog, revs, deltainfo=None, targetsize=None): |
|
300 | 311 | """slice revs to reduce the amount of unrelated data to be read from disk. |
@@ -526,7 +537,7 b' def _slicechunktodensity(revlog, revs, d' | |||
|
526 | 537 | yield revs |
|
527 | 538 | return |
|
528 | 539 | |
|
529 | if deltainfo is not None: | |
|
540 | if deltainfo is not None and deltainfo.deltalen: | |
|
530 | 541 | revs = list(revs) |
|
531 | 542 | revs.append(nextrev) |
|
532 | 543 | |
@@ -2444,7 +2455,8 b' class revlog(object):' | |||
|
2444 | 2455 | deltachain = [] |
|
2445 | 2456 | |
|
2446 | 2457 | chunks = _slicechunk(self, deltachain, deltainfo) |
|
2447 |
|
|
|
2458 | all_span = [_segmentspan(self, revs, deltainfo) for revs in chunks] | |
|
2459 | distance = max(all_span) | |
|
2448 | 2460 | else: |
|
2449 | 2461 | distance = deltainfo.distance |
|
2450 | 2462 |
General Comments 0
You need to be logged in to leave comments.
Login now