diff-delta.c: Fix broken skip calculation.
authorDavid Kastrup <dak@gnu.org>
Thu, 23 Aug 2007 05:51:45 +0000 (07:51 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 23 Aug 2007 07:04:10 +0000 (00:04 -0700)
A particularly bad case was HASH_LIMIT <= hash_count[i] < 2*HASH_LIMIT:
in that case, only a single hash survived.  For larger cases,
2*HASH_LIMIT was the actual limiting value after pruning.

Signed-off-by: David Kastrup <dak@gnu.org>
Acked-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff-delta.c

index 3af583536f2ee9f2d1f2fd699148ff16166dc932..0dde2f2dc032863b154509f5b966cfafb01dd722 100644 (file)
@@ -213,7 +213,7 @@ struct delta_index * create_delta_index(const void *buf, unsigned long bufsize)
                entry = hash[i];
                do {
                        struct index_entry *keep = entry;
-                       int skip = hash_count[i] / HASH_LIMIT / 2;
+                       int skip = hash_count[i] / HASH_LIMIT;
                        do {
                                entry = entry->next;
                        } while(--skip && entry);