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?
