[pacman-dev] [PATCH] libalpm: download sig files with -U when missing
Anatol Pomozov
anatol.pomozov at gmail.com
Sun Jan 10 20:45:04 UTC 2021
Hi
The commit description sounds like a duplicate of
https://bugs.archlinux.org/task/33992
Isn't it fixed by commit f3dfba73d22b7eca3810a8114f2aab63da488b4c ?
On Sun, Jan 10, 2021 at 12:22 PM morganamilo <morganamilo at archlinux.org> wrote:
>
> ---
>
> 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.
That's because the download URL can be redirected. And the final URL
of the package is not known until the download starts.
There is also a requirement that *.sig file should come from the same
server as the package itself, i.e. *.sig file URL is unknown until the
package download URL is resolved.
> 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