Fix delta "sliding window" code
When Junio fixed the lack of a successful error code from try_delta(), that uncovered an off-by-one error in the caller. Also, some testing made it clear that we now find a lot more deltas, because we used to (incorrectly) break early on bogus "failure" cases.
This commit is contained in:
@@ -344,11 +344,12 @@ static void find_deltas(struct object_entry **list, int window)
|
|||||||
n->data = read_sha1_file(entry->sha1, type, &size);
|
n->data = read_sha1_file(entry->sha1, type, &size);
|
||||||
if (size != entry->size)
|
if (size != entry->size)
|
||||||
die("object %s inconsistent object length (%lu vs %lu)", sha1_to_hex(entry->sha1), size, entry->size);
|
die("object %s inconsistent object length (%lu vs %lu)", sha1_to_hex(entry->sha1), size, entry->size);
|
||||||
for (j = 0; j < window; j++) {
|
j = window;
|
||||||
unsigned int other_idx = idx - 1 - j;
|
while (--j > 0) {
|
||||||
|
unsigned int other_idx = idx + j;
|
||||||
struct unpacked *m;
|
struct unpacked *m;
|
||||||
if (other_idx < 0)
|
if (other_idx >= window)
|
||||||
other_idx += window;
|
other_idx -= window;
|
||||||
m = array + other_idx;
|
m = array + other_idx;
|
||||||
if (!m->entry)
|
if (!m->entry)
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user