[pacman-dev] [PATCH 4/5] libalpm: totaldlcb say how many packages will be downloaded

morganamilo morganamilo at archlinux.org
Fri Jan 1 16:57:47 UTC 2021


---
 lib/libalpm/alpm.h    | 3 ++-
 lib/libalpm/sync.c    | 6 +++++-
 src/pacman/callback.c | 3 ++-
 src/pacman/callback.h | 2 +-
 4 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index 72c4fb24..92586043 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -1189,9 +1189,10 @@ typedef void (*alpm_cb_download)(const char *filename,
 
 
 /** Total Download callback.
+ * @param howmany the number of packages that will be downloaded during \link alpm_trans_commit \endlink.
  * @param total amount that will be downloaded during \link alpm_trans_commit \endlink.
  */
-typedef void (*alpm_cb_totaldl)(off_t total);
+typedef void (*alpm_cb_totaldl)(size_t howmany, off_t total);
 
 /** A callback for downloading files
  * @param url the URL of the file to be downloaded
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index e25e56d4..3919d266 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -760,12 +760,16 @@ static int download_files(alpm_handle_t *handle)
 	 * frontend to compute incremental progress. */
 	if(handle->totaldlcb) {
 		off_t total_size = (off_t)0;
+		size_t howmany = 0;
 		/* sum up the download size for each package and store total */
 		for(i = handle->trans->add; i; i = i->next) {
 			alpm_pkg_t *spkg = i->data;
 			total_size += spkg->download_size;
+			if(spkg->download_size > 0) {
+				howmany++;
+			}
 		}
-		handle->totaldlcb(total_size);
+		handle->totaldlcb(howmany, total_size);
 	}
 
 	ret = find_dl_candidates(handle, &files);
diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index 6ed7557a..f11382a0 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -694,8 +694,9 @@ void cb_progress(alpm_progress_t event, const char *pkgname, int percent,
 }
 
 /* callback to handle receipt of total download value */
-void cb_dl_total(off_t total)
+void cb_dl_total(size_t howmany, off_t total)
 {
+	(void)howmany;
 	list_total = total;
 }
 
diff --git a/src/pacman/callback.h b/src/pacman/callback.h
index 09d544a6..508c96b3 100644
--- a/src/pacman/callback.h
+++ b/src/pacman/callback.h
@@ -36,7 +36,7 @@ void cb_progress(alpm_progress_t event, const char *pkgname, int percent,
                    size_t howmany, size_t remain);
 
 /* callback to handle receipt of total download value */
-void cb_dl_total(off_t total);
+void cb_dl_total(size_t howmany, off_t total);
 /* callback to handle display of download progress */
 void cb_download(const char *filename, alpm_download_event_type_t event,
 		void *data);
-- 
2.30.0


More information about the pacman-dev mailing list