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:
Linus Torvalds 2005-06-25 18:29:23 -07:00
parent eb41ab11e8
commit 78817c15de

View file

@ -344,11 +344,12 @@ static void find_deltas(struct object_entry **list, int window)
n->data = read_sha1_file(entry->sha1, type, &size);
if (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++) {
unsigned int other_idx = idx - 1 - j;
j = window;
while (--j > 0) {
unsigned int other_idx = idx + j;
struct unpacked *m;
if (other_idx < 0)
other_idx += window;
if (other_idx >= window)
other_idx -= window;
m = array + other_idx;
if (!m->entry)
break;