280 high = len(data) |
280 high = len(data) |
281 t = (old, new) |
281 t = (old, new) |
282 while low < high: |
282 while low < high: |
283 mid = (low + high) // 2 |
283 mid = (low + high) // 2 |
284 revs = data[mid][0] |
284 revs = data[mid][0] |
285 |
285 revs_low = revs[0] |
286 if rev in revs: |
286 revs_high = revs[-1] |
|
287 |
|
288 if rev >= revs_low and rev <= revs_high: |
287 _sortedrange_split(data, mid, rev, t) |
289 _sortedrange_split(data, mid, rev, t) |
288 return |
290 return |
289 |
291 |
290 if revs[0] == rev + 1: |
292 if revs_low == rev + 1: |
291 if mid and data[mid - 1][0][-1] == rev: |
293 if mid and data[mid - 1][0][-1] == rev: |
292 _sortedrange_split(data, mid - 1, rev, t) |
294 _sortedrange_split(data, mid - 1, rev, t) |
293 else: |
295 else: |
294 _sortedrange_insert(data, mid, rev, t) |
296 _sortedrange_insert(data, mid, rev, t) |
295 return |
297 return |
296 |
298 |
297 if revs[-1] == rev - 1: |
299 if revs_high == rev - 1: |
298 if mid + 1 < len(data) and data[mid + 1][0][0] == rev: |
300 if mid + 1 < len(data) and data[mid + 1][0][0] == rev: |
299 _sortedrange_split(data, mid + 1, rev, t) |
301 _sortedrange_split(data, mid + 1, rev, t) |
300 else: |
302 else: |
301 _sortedrange_insert(data, mid + 1, rev, t) |
303 _sortedrange_insert(data, mid + 1, rev, t) |
302 return |
304 return |
303 |
305 |
304 if revs[0] > rev: |
306 if revs_low > rev: |
305 high = mid |
307 high = mid |
306 else: |
308 else: |
307 low = mid + 1 |
309 low = mid + 1 |
308 |
310 |
309 if low == len(data): |
311 if low == len(data): |