[pacman-dev] [PATCH 1/2] Ensure progress callback updates if XX/YY numerator changes

Dan McGee dan at archlinux.org
Mon Aug 29 17:26:59 EDT 2011


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 at archlinux.org>
---
 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 04b3a52..e832b49 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) {
-- 
1.7.6.1



More information about the pacman-dev mailing list