Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Pomozov <anatol.pomozov@gmail.com>2021-03-15 16:33:08 -0700
committerAllan McRae <allan@archlinux.org>2021-03-25 11:39:03 +1000
commit1e60a5f00674a9a9b0c530c741bd6701d0e1e834 (patch)
tree8539fba8183d42179f6b5504f32725bd1901de4c
parent9bf3d6a7603bf48771a20d1f4bd789670e7446f7 (diff)
Remove "total download" callback in favor of generic event callback
Total download callback called right before packages start downloaded. But we already have an event for such event (ALPM_EVENT_PKG_RETRIEVE_START) and it is naturally to use the event to pass information about expected download size. Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--README1
-rw-r--r--lib/libalpm/alpm.h32
-rw-r--r--lib/libalpm/dload.c3
-rw-r--r--lib/libalpm/handle.c13
-rw-r--r--lib/libalpm/handle.h1
-rw-r--r--lib/libalpm/sync.c25
-rw-r--r--src/pacman/callback.c9
-rw-r--r--src/pacman/callback.h2
-rw-r--r--src/pacman/conf.c4
9 files changed, 25 insertions, 65 deletions
diff --git a/README b/README
index 6aa68374..470ccf3c 100644
--- a/README
+++ b/README
@@ -52,7 +52,6 @@ library is initialized.
* logcb: The callback function for "log" operations.
* dlcb: The callback function for download progress of each package.
* fetchcb: Callback for custom download function.
-* totaldlcb: The callback function for overall download progress.
* eventcb: Callback for transaction messages.
* questioncb: Callback for selecting amongst choices.
* progresscb: Callback to handle display of transaction progress.
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index 0909fe11..833df829 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -926,6 +926,16 @@ typedef struct _alpm_event_hook_run_t {
size_t total;
} alpm_event_hook_run_t;
+/** Packages downloading about to start. */
+typedef struct _alpm_event_pkg_retrieve_t {
+ /** Type of event */
+ alpm_event_type_t type;
+ /** Number of packages to download */
+ size_t num;
+ /** Total size of packages to download */
+ off_t total_size;
+} alpm_event_pkg_retrieve_t;
+
/** Events.
* This is a union passed to the callback that allows the frontend to know
* which type of event was triggered (via type). It is then possible to
@@ -954,6 +964,8 @@ typedef union _alpm_event_t {
alpm_event_hook_t hook;
/** A hook was ran */
alpm_event_hook_run_t hook_run;
+ /** Download packages */
+ alpm_event_pkg_retrieve_t pkg_retrieve;
} alpm_event_t;
/** Event callback.
@@ -1197,12 +1209,6 @@ typedef void (*alpm_cb_download)(const char *filename,
alpm_download_event_type_t event, void *data);
-/** 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)(size_t howmany, off_t total);
-
/** A callback for downloading files
* @param url the URL of the file to be downloaded
* @param localpath the directory to which the file should be downloaded
@@ -1525,20 +1531,6 @@ alpm_cb_fetch alpm_option_get_fetchcb(alpm_handle_t *handle);
*/
int alpm_option_set_fetchcb(alpm_handle_t *handle, alpm_cb_fetch cb);
-/** Returns the callback used to report total download size.
- * @param handle the context handle
- * @return the currently set total download callback
- */
-alpm_cb_totaldl alpm_option_get_totaldlcb(alpm_handle_t *handle);
-
-/** Sets the callback used to report total download size.
- * @param handle the context handle
- * @param cb the cb to use
- * @return 0 on success, -1 on error (pm_errno is set accordingly)
- */
-int alpm_option_set_totaldlcb(alpm_handle_t *handle, alpm_cb_totaldl cb);
-
-
/** Returns the callback used for events.
* @param handle the context handle
* @return the currently set event callback
diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
index 0d0936c7..3e20d335 100644
--- a/lib/libalpm/dload.c
+++ b/lib/libalpm/dload.c
@@ -851,7 +851,7 @@ int SYMEXPORT alpm_fetch_pkgurl(alpm_handle_t *handle, const alpm_list_t *urls,
const char *cachedir;
alpm_list_t *payloads = NULL;
const alpm_list_t *i;
- alpm_event_t event;
+ alpm_event_t event = {0};
CHECK_HANDLE(handle, return -1);
ASSERT(*fetched == NULL, RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1));
@@ -884,6 +884,7 @@ int SYMEXPORT alpm_fetch_pkgurl(alpm_handle_t *handle, const alpm_list_t *urls,
if(payloads) {
event.type = ALPM_EVENT_PKG_RETRIEVE_START;
+ event.pkg_retrieve.num = alpm_list_count(payloads);
EVENT(handle, &event);
if(_alpm_download(handle, payloads, cachedir) == -1) {
_alpm_log(handle, ALPM_LOG_WARNING, _("failed to retrieve some files\n"));
diff --git a/lib/libalpm/handle.c b/lib/libalpm/handle.c
index d1ea5886..7b8cb1da 100644
--- a/lib/libalpm/handle.c
+++ b/lib/libalpm/handle.c
@@ -174,12 +174,6 @@ alpm_cb_fetch SYMEXPORT alpm_option_get_fetchcb(alpm_handle_t *handle)
return handle->fetchcb;
}
-alpm_cb_totaldl SYMEXPORT alpm_option_get_totaldlcb(alpm_handle_t *handle)
-{
- CHECK_HANDLE(handle, return NULL);
- return handle->totaldlcb;
-}
-
alpm_cb_event SYMEXPORT alpm_option_get_eventcb(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
@@ -327,13 +321,6 @@ int SYMEXPORT alpm_option_set_fetchcb(alpm_handle_t *handle, alpm_cb_fetch cb)
return 0;
}
-int SYMEXPORT alpm_option_set_totaldlcb(alpm_handle_t *handle, alpm_cb_totaldl cb)
-{
- CHECK_HANDLE(handle, return -1);
- handle->totaldlcb = cb;
- return 0;
-}
-
int SYMEXPORT alpm_option_set_eventcb(alpm_handle_t *handle, alpm_cb_event cb)
{
CHECK_HANDLE(handle, return -1);
diff --git a/lib/libalpm/handle.h b/lib/libalpm/handle.h
index 349ef2c7..2ebaafb2 100644
--- a/lib/libalpm/handle.h
+++ b/lib/libalpm/handle.h
@@ -72,7 +72,6 @@ struct __alpm_handle_t {
/* callback functions */
alpm_cb_log logcb; /* Log callback function */
alpm_cb_download dlcb; /* Download callback function */
- alpm_cb_totaldl totaldlcb; /* Total download callback function */
alpm_cb_fetch fetchcb; /* Download file callback function */
alpm_cb_event eventcb;
alpm_cb_question questioncb;
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index d258b8d1..7fa50a13 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -749,7 +749,7 @@ static int download_files(alpm_handle_t *handle)
const char *cachedir;
alpm_list_t *i, *files = NULL;
int ret = 0;
- alpm_event_t event;
+ alpm_event_t event = {0};
alpm_list_t *payloads = NULL;
cachedir = _alpm_filecache_setup(handle);
@@ -760,21 +760,6 @@ static int download_files(alpm_handle_t *handle)
goto finish;
}
- /* Total progress - figure out the total download size if required to
- * pass to the callback. This function is called once, and it is up to the
- * 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 = files; i; i = i->next) {
- alpm_pkg_t *spkg = i->data;
- total_size += spkg->download_size;
- howmany++;
- }
- handle->totaldlcb(howmany, total_size);
- }
-
if(files) {
/* check for necessary disk space for download */
if(handle->checkspace) {
@@ -800,6 +785,14 @@ static int download_files(alpm_handle_t *handle)
}
event.type = ALPM_EVENT_PKG_RETRIEVE_START;
+
+ /* sum up the number of packages to download and its total size */
+ for(i = files; i; i = i->next) {
+ alpm_pkg_t *spkg = i->data;
+ event.pkg_retrieve.total_size += spkg->download_size;
+ event.pkg_retrieve.num++;
+ }
+
EVENT(handle, &event);
for(i = files; i; i = i->next) {
alpm_pkg_t *pkg = i->data;
diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index 40973340..a28a79a9 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -338,6 +338,8 @@ void cb_event(alpm_event_t *event)
case ALPM_EVENT_PKG_RETRIEVE_START:
colon_printf(_("Retrieving packages...\n"));
on_progress = 1;
+ list_total_pkgs = event->pkg_retrieve.num;
+ list_total = event->pkg_retrieve.total_size;
total_enabled = config->totaldownload && list_total;
if(total_enabled) {
init_total_progressbar();
@@ -696,13 +698,6 @@ void cb_progress(alpm_progress_t event, const char *pkgname, int percent,
}
}
-/* callback to handle receipt of total download value */
-void cb_dl_total(size_t howmany, off_t total)
-{
- list_total_pkgs = howmany;
- list_total = total;
-}
-
static int dload_progressbar_enabled(void)
{
return !config->noprogressbar && (getcols() != 0);
diff --git a/src/pacman/callback.h b/src/pacman/callback.h
index 9b5deb6f..8ac9d960 100644
--- a/src/pacman/callback.h
+++ b/src/pacman/callback.h
@@ -35,8 +35,6 @@ void cb_question(alpm_question_t *question);
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(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);
diff --git a/src/pacman/conf.c b/src/pacman/conf.c
index 96e5790f..a4f2ba35 100644
--- a/src/pacman/conf.c
+++ b/src/pacman/conf.c
@@ -892,10 +892,6 @@ static int setup_libalpm(void)
pm_printf(ALPM_LOG_WARNING, _("no '%s' configured\n"), "XferCommand");
}
- if(config->totaldownload) {
- alpm_option_set_totaldlcb(handle, cb_dl_total);
- }
-
alpm_option_set_arch(handle, config->arch);
alpm_option_set_checkspace(handle, config->checkspace);
alpm_option_set_usesyslog(handle, config->usesyslog);