summary refs log tree commit diff
path: root/csum-file.c
diff options
context:
space:
mode:
authorNicolas Pitre <nico@cam.org>2007-11-04 22:15:41 -0500
committerJunio C Hamano <gitster@pobox.com>2007-11-05 12:53:14 -0800
commit218558af599c01e5dec17a7399d9188a76c50203 (patch)
tree4cbbbc442f76653aec103c4e7c1d62763fe5e5e2 /csum-file.c
parent0d8aafd25271c8d1cf185019437e21362edc1bc7 (diff)
make display of total transferred more accurate
The throughput display needs a delay period before accounting and
displaying anything.  Yet it might be called after some amount of data
has already been transferred.  The display of total data is therefore
accounted late and therefore smaller than the reality.

Let's call display_throughput() with an absolute amount of transferred
data instead of a relative number, and let the throughput code find the
relative amount of data by itself as needed.  This way the displayed
total is always exact.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'csum-file.c')
-rw-r--r--csum-file.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/csum-file.c b/csum-file.c
index 3729e73e19..b445e6a2e5 100644
--- a/csum-file.c
+++ b/csum-file.c
@@ -18,7 +18,8 @@ static void sha1flush(struct sha1file *f, unsigned int count)
 	for (;;) {
 		int ret = xwrite(f->fd, buf, count);
 		if (ret > 0) {
-			display_throughput(f->tp, ret);
+			f->total += ret;
+			display_throughput(f->tp, f->total);
 			buf = (char *) buf + ret;
 			count -= ret;
 			if (count)
@@ -101,6 +102,7 @@ struct sha1file *sha1fd_throughput(int fd, const char *name, struct progress *tp
 	f->fd = fd;
 	f->error = 0;
 	f->offset = 0;
+	f->total = 0;
 	f->tp = tp;
 	f->do_crc = 0;
 	SHA1_Init(&f->ctx);