--- Also, I think the way signature downloading is a bit weird. You can't just download a signature. You have to say you want to download the package then the downloader will download the sig after the package finishes downloading. I think it would make more sense for signatures to be their own payloads and then have a dlsigcb. This would go towards fixing FS#67813 If totaldlcb reports 0 packages to download, then we can show the progress bars for the sigs instead of the packages. --- lib/libalpm/dload.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index df5e8be7..66ebeae9 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -863,8 +863,27 @@ int SYMEXPORT alpm_fetch_pkgurl(alpm_handle_t *handle, const alpm_list_t *urls, char *url = i->data; /* attempt to find the file in our pkgcache */ + char *filepath = filecache_find_url(handle, url); - if(filepath) { + int need_download = !filepath; + /* even if the package file in the cache we need to check for + * accompanion *.sig file as well. + * If *.sig is not cached then force download the package + its signature file. + */ + if(!need_download && (handle->siglevel & ALPM_SIG_PACKAGE)) { + char *sig_filename = NULL; + int len = strlen(filepath) + 5; + + MALLOC(sig_filename, len, RET_ERR(handle, ALPM_ERR_MEMORY, -1)); + snprintf(sig_filename, len, "%s.sig", filepath); + + need_download = !_alpm_filecache_exists(handle, sig_filename); + + FREE(sig_filename); + } + + + if(!need_download) { /* the file is locally cached so add it to the output right away */ alpm_list_append(fetched, filepath); } else { -- 2.30.0