On 04/18/21 at 11:31pm, morganamilo wrote:
> When a download fails on one mirror a new download is started on the
> next mirror. This new download will have the initial size of whatever
> has been downloaded so far, as well as the ammount downloaded reset to
> 0.
> 
> To account for this, when a download changes mirror, save how much has
> been downloaded so far and add that to dlcb calls.
> ---
>  lib/libalpm/dload.c | 14 ++++++++++++--
>  lib/libalpm/dload.h |  1 +
>  2 files changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
> index a4c42f8d..27a7748a 100644
> --- a/lib/libalpm/dload.c
> +++ b/lib/libalpm/dload.c
> @@ -207,8 +207,8 @@ static int dload_progress_cb(void *file, curl_off_t 
> dltotal, curl_off_t dlnow,
>  
>       /* do NOT include initial_size since it wasn't part of the package's
>        * download_size (nor included in the total download size callback) */
> -     cb_data.total = dltotal;
> -     cb_data.downloaded = dlnow;
> +     cb_data.total = dltotal + payload->resetprogress;
> +     cb_data.downloaded = dlnow + payload->resetprogress;
>       payload->handle->dlcb(payload->remote_name, ALPM_DOWNLOAD_PROGRESS, 
> &cb_data);
>       payload->prevprogress = current_size;
>  
> @@ -440,6 +440,16 @@ static int curl_retry_next_server(CURLM *curlm, CURL 
> *curl, struct dload_payload
>               fseek(payload->localf, 0, SEEK_SET);
>       }
>  
> +
> +     /* reset progress for next server */
> +     payload->resetprogress += payload->prevprogress - payload->initial_size;
> +     payload->unlink_on_fail = 0;

Without looking at the rest of the patch, how does this line not just
straight up break unlink_on_fail functionality for any download that
falls back to another server?

Reply via email to