[pacman-dev] [PATCH] libalpm: download sig files with -U when missing
morganamilo
morganamilo at archlinux.org
Sun Jan 10 20:22:49 UTC 2021
---
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
More information about the pacman-dev
mailing list