[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