From: Linus Torvalds Date: Sun, 26 Jun 2005 01:29:23 +0000 (-0700) Subject: Fix delta "sliding window" code X-Git-Tag: v0.99~176 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=78817c15de0dfb408d1e35a2f692f54dc51e80a3;p=git.git 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. --- diff --git a/pack-objects.c b/pack-objects.c index 68c7e592b..dfa9d44a1 100644 --- a/pack-objects.c +++ b/pack-objects.c @@ -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;