summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2011-08-29 23:23:06 +0200
committerDan McGee <dan@archlinux.org>2011-08-30 02:56:14 +0200
commit515720a6fcc54c35420b5b5cf9258c8f2b5dc01b (patch)
tree6fa185a5db14c58707b9268f0d21d32b205b360a
parent8129b93afe13a6546f46c6615c316ed85f341191 (diff)
downloadpacman-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.c13
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) {