From d36f7b805eccaf702c0be1c00d034711d0da1f77 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sat, 9 Jul 2005 10:43:02 -0700 Subject: [PATCH] git-unpack-objects: show progress report by default This ends up being very calming for big "git clone"s, since otherwise you just get very frustrated with a long silence, wondering whether it's working at all. Use "-q" to quiet it down. Now if we could just do the same for the initial "figure out what to pack" phase, which can also be quite slow if the other end is busy (or not packed and not in cache)... --- unpack-objects.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/unpack-objects.c b/unpack-objects.c index 6383db94a..355889f65 100644 --- a/unpack-objects.c +++ b/unpack-objects.c @@ -3,7 +3,9 @@ #include "delta.h" #include "pack.h" -static int dry_run; +#include + +static int dry_run, quiet; static const char unpack_usage[] = "git-unpack-objects < pack-file"; /* We always read in 4kB chunks. */ @@ -185,7 +187,7 @@ static int unpack_delta_entry(unsigned long delta_size) return resolve_delta(type, base, base_size, delta_data, delta_size); } -static void unpack_one(void) +static void unpack_one(unsigned nr, unsigned total) { unsigned shift; unsigned char *pack, c; @@ -205,6 +207,19 @@ static void unpack_one(void) size += (c & 0x7f) << shift; shift += 7; } + if (!quiet) { + static unsigned long last_sec; + static unsigned last_percent; + struct timeval now; + unsigned percentage = ((1+nr) * 100) / total; + + gettimeofday(&now, NULL); + if (percentage != last_percent || now.tv_sec != last_sec) { + last_sec = now.tv_sec; + last_percent = percentage; + fprintf(stderr, "%4u%% (%u/%u) done\r", percentage, nr, total); + } + } switch (type) { case OBJ_COMMIT: case OBJ_TREE: @@ -240,7 +255,7 @@ static void unpack_all(void) use(sizeof(struct pack_header)); for (i = 0; i < nr_objects; i++) - unpack_one(); + unpack_one(i, nr_objects); if (delta_list) die("unresolved deltas left after unpacking"); } @@ -258,6 +273,10 @@ int main(int argc, char **argv) dry_run = 1; continue; } + if (!strcmp(arg, "-q")) { + quiet = 1; + continue; + } usage(unpack_usage); } @@ -287,5 +306,7 @@ int main(int argc, char **argv) } /* All done */ + if (!quiet) + fprintf(stderr, "\n"); return 0; } -- 2.30.2