diff --git a/mercurial/revlogutils/deltas.py b/mercurial/revlogutils/deltas.py index bfbfd15d65bd862d596af7154ef29f1321b4cfa1_bWVyY3VyaWFsL3JldmxvZ3V0aWxzL2RlbHRhcy5weQ==..54de23400b2a14f5811e3e8e88fc543daf6155d4_bWVyY3VyaWFsL3JldmxvZ3V0aWxzL2RlbHRhcy5weQ== 100644 --- a/mercurial/revlogutils/deltas.py +++ b/mercurial/revlogutils/deltas.py @@ -275,8 +275,7 @@ return # Store the gaps in a heap to have them sorted by decreasing size - gapsheap = [] - heapq.heapify(gapsheap) + gaps = [] prevend = None for i, rev in enumerate(revs): revstart = start(rev) @@ -290,6 +289,6 @@ gapsize = revstart - prevend # only consider holes that are large enough if gapsize > mingapsize: - heapq.heappush(gapsheap, (-gapsize, i)) + gaps.append((gapsize, i)) prevend = revstart + revlen @@ -294,6 +293,8 @@ prevend = revstart + revlen + # sort the gaps to pop them from largest to small + gaps.sort() # Collect the indices of the largest holes until the density is acceptable indicesheap = [] heapq.heapify(indicesheap) @@ -296,11 +297,11 @@ # Collect the indices of the largest holes until the density is acceptable indicesheap = [] heapq.heapify(indicesheap) - while gapsheap and density < targetdensity: - oppgapsize, gapidx = heapq.heappop(gapsheap) + while gaps and density < targetdensity: + gapsize, gapidx = gaps.pop() heapq.heappush(indicesheap, gapidx) # the gap sizes are stored as negatives to be sorted decreasingly # by the heap @@ -302,9 +303,9 @@ heapq.heappush(indicesheap, gapidx) # the gap sizes are stored as negatives to be sorted decreasingly # by the heap - readdata -= (-oppgapsize) + readdata -= gapsize if readdata > 0: density = chainpayload / float(readdata) else: