Nicolas Pitre <nico@xxxxxxx> writes: > On Fri, 24 Feb 2006, Junio C Hamano wrote: > >> In Linux 2.6 repository, these object pairs take forever to >> delta. >> >> blob 9af06ba723df75fed49f7ccae5b6c9c34bc5115f -> >> blob dfc9cd58dc065d17030d875d3fea6e7862ede143 >> size (491102 -> 496045) >> 58 seconds >> >> blob 4917ec509720a42846d513addc11cbd25e0e3c4f -> >> blob dfc9cd58dc065d17030d875d3fea6e7862ede143 >> size (495831 -> 496045) >> 64 seconds > > Thanks for this. I'll see what I can do to tweak the code to better > cope with those. Just keep my fourth delta patch in the pu branch for > now. If apply this on top of pack-objects.c, you can find more of them yourself. --- diff --git a/pack-objects.c b/pack-objects.c index be7a200..3f88e86 100644 --- a/pack-objects.c +++ b/pack-objects.c @@ -62,6 +62,7 @@ static const char *base_name; static unsigned char pack_file_sha1[20]; static int progress = 1; static volatile int progress_update = 0; +static volatile int progress_update_cnt = 0; /* * The object names in objects array are hashed with this hashtable, @@ -826,6 +827,7 @@ static int try_delta(struct unpacked *cu struct object_entry *old_entry = old->entry; int old_preferred = (old_entry->preferred_base || old_entry->based_on_preferred); + int last_up; unsigned long size, oldsize, delta_size, sizediff; long max_size; void *delta_buf; @@ -890,8 +892,17 @@ static int try_delta(struct unpacked *cu } if (sizediff >= max_size) return -1; + last_up = progress_update_cnt; delta_buf = diff_delta(old->data, oldsize, cur->data, size, &delta_size, max_size); + if (last_up + 1 < progress_update_cnt) { + /* It took more than one second */ + fprintf(stderr, "%d -> %d: %s -> ", + last_up, progress_update_cnt, + sha1_to_hex(old_entry->sha1)); + fprintf(stderr, "%s (%lu -> %lu)\n", + sha1_to_hex(cur_entry->sha1), oldsize, size); + } if (!delta_buf) return 0; cur_entry->delta = old_entry; @@ -906,6 +917,7 @@ static void progress_interval(int signum { signal(SIGALRM, progress_interval); progress_update = 1; + progress_update_cnt++; } static void find_deltas(struct object_entry **list, int window, int depth) - : send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html