Show More
@@ -162,6 +162,20 b' def hash(text, p1, p2):' | |||
|
162 | 162 | s.update(text) |
|
163 | 163 | return s.digest() |
|
164 | 164 | |
|
165 | def _trimchunk(revlog, revs, startidx, endidx=None): | |
|
166 | """returns revs[startidx:endidx] without empty trailing revs | |
|
167 | """ | |
|
168 | length = revlog.length | |
|
169 | ||
|
170 | if endidx is None: | |
|
171 | endidx = len(revs) | |
|
172 | ||
|
173 | # Trim empty revs at the end, but never the very first revision of a chain | |
|
174 | while endidx > 1 and endidx > startidx and length(revs[endidx - 1]) == 0: | |
|
175 | endidx -= 1 | |
|
176 | ||
|
177 | return revs[startidx:endidx] | |
|
178 | ||
|
165 | 179 | def _slicechunk(revlog, revs): |
|
166 | 180 | """slice revs to reduce the amount of unrelated data to be read from disk. |
|
167 | 181 | |
@@ -194,6 +208,10 b' def _slicechunk(revlog, revs):' | |||
|
194 | 208 | revstart = start(rev) |
|
195 | 209 | revlen = length(rev) |
|
196 | 210 | |
|
211 | # Skip empty revisions to form larger holes | |
|
212 | if revlen == 0: | |
|
213 | continue | |
|
214 | ||
|
197 | 215 | if prevend is not None: |
|
198 | 216 | gapsize = revstart - prevend |
|
199 | 217 | # only consider holes that are large enough |
@@ -222,9 +240,16 b' def _slicechunk(revlog, revs):' | |||
|
222 | 240 | previdx = 0 |
|
223 | 241 | while indicesheap: |
|
224 | 242 | idx = heapq.heappop(indicesheap) |
|
225 | yield revs[previdx:idx] | |
|
243 | ||
|
244 | chunk = _trimchunk(revlog, revs, previdx, idx) | |
|
245 | if chunk: | |
|
246 | yield chunk | |
|
247 | ||
|
226 | 248 | previdx = idx |
|
227 | yield revs[previdx:] | |
|
249 | ||
|
250 | chunk = _trimchunk(revlog, revs, previdx) | |
|
251 | if chunk: | |
|
252 | yield chunk | |
|
228 | 253 | |
|
229 | 254 | # index v0: |
|
230 | 255 | # 4 bytes: offset |
General Comments 0
You need to be logged in to leave comments.
Login now