[pacman-dev] Duplicated lines of "downloading foo.db..." with --noprogressbar

Andrew Gregory andrew.gregory.8 at gmail.com
Wed May 6 02:39:11 UTC 2015


On 05/06/15 at 12:32am, David Macek wrote:
> On 4. 5. 2015 14:55, Andrew Gregory wrote:
> > I don't think this is the right solution.  The comments in
> > dload_progress_cb suggest that the callback is not intended to be
> > called until we have actually downloaded something. So, file_xfered
> > should always equal 0 exactly once per downloaded file.  I think it
> > makes more sense to fix dload_progress_cb.  We might also consider
> > using the event callback rather than the download callback when
> > noprogressbar is set.
> 
> Okay. I was thinking and came up with another idea, along the lines of this incomplete patch:
> 
> --- a/lib/libalpm/dload.c
> +++ b/lib/libalpm/dload.c
> @@ -127,15 +127,17 @@ static int dload_progress_cb(void *file, double dltotal, double dlnow,
>  
>  	/* initialize the progress bar here to avoid displaying it when
>  	 * a repo is up to date and nothing gets downloaded */
> -	if(payload->prevprogress == 0) {
> +	if(payload->prevprogress == -1) {
>  		payload->handle->dlcb(payload->remote_name, 0, (off_t)dltotal);
> +		payload->prevprogress = payload->initial_size;
>  	}
>  
>  	/* do NOT include initial_size since it wasn't part of the package's
>  	 * download_size (nor included in the total download size callback) */
> -	payload->handle->dlcb(payload->remote_name, (off_t)dlnow, (off_t)dltotal);
> -
> -	payload->prevprogress = current_size;
> +	if(payload->prevprogress != current_size) {
> +		payload->handle->dlcb(payload->remote_name, (off_t)dlnow, (off_t)dltotal);
> +		payload->prevprogress = current_size;
> +	}
>  
>  	return 0;
>  }
> 
> If putting -1 into prevprogress is undesirable, can we introduce
> a new field into the dload_payload type? (If introducing a new field
> is a big deal for libalpm clients, maybe we can future-proof the
> struct by adding a `struct dload_payload_internal *_alpm_internal`
> field instead and keeping `struct dload_payload_internal`
> unexported.)

There's an easier solution: just check for dlnow > 0 at the same time
we check for the existence of dlcb.

apg


More information about the pacman-dev mailing list