diff options
author | Dan McGee <dan@archlinux.org> | 2011-08-29 23:23:06 +0200 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2011-08-30 02:56:14 +0200 |
commit | 515720a6fcc54c35420b5b5cf9258c8f2b5dc01b (patch) | |
tree | 6fa185a5db14c58707b9268f0d21d32b205b360a | |
parent | 8129b93afe13a6546f46c6615c316ed85f341191 (diff) | |
download | pacman-515720a6fcc54c35420b5b5cf9258c8f2b5dc01b.tar.gz pacman-515720a6fcc54c35420b5b5cf9258c8f2b5dc01b.tar.xz |
Ensure progress callback updates if XX/YY numerator changes
We only updated if the percentage incremented and enough time had
elapsed, even though the numerator of the current/howmany fraction may
have changed. Ensure we proceed with the progress bar update in these
cases so as to not mislead the user.
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | src/pacman/callback.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/pacman/callback.c b/src/pacman/callback.c index 04b3a527..e832b49b 100644 --- a/src/pacman/callback.c +++ b/src/pacman/callback.c @@ -43,9 +43,6 @@ static off_t list_xfered = 0.0; static off_t list_total = 0.0; static struct timeval initial_time; -/* transaction progress bar */ -static int prevpercent = 0; /* for less progressbar output */ - /* delayed output during progress bar */ static int on_progress = 0; static alpm_list_t *output = NULL; @@ -349,6 +346,8 @@ void cb_trans_conv(alpm_transconv_t event, void *data1, void *data2, void cb_trans_progress(alpm_transprog_t event, const char *pkgname, int percent, size_t howmany, size_t current) { + static int prevpercent; + static size_t prevcurrent; /* size of line to allocate for text printing (e.g. not progressbar) */ int infolen; int digits, textlen; @@ -373,14 +372,18 @@ void cb_trans_progress(alpm_transprog_t event, const char *pkgname, int percent, return; } } else { - if(!pkgname || percent == prevpercent || get_update_timediff(0) < UPDATE_SPEED_SEC) { + if(current != prevcurrent) { + /* update always */ + } else if(!pkgname || percent == prevpercent || + get_update_timediff(0) < UPDATE_SPEED_SEC) { /* only update the progress bar when we have a package name, the - * percentage has changed, and it has been long enough. */ + * percentage has changed, and it has been long enough. */ return; } } prevpercent = percent; + prevcurrent = current; /* set text of message to display */ switch (event) { |