FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > ArchLinux > ArchLinux Pacman Development

 
 
LinkBack Thread Tools
 
Old 09-08-2011, 01:26 AM
Dan McGee
 
Default make compute_download_size consider .part files

On Wed, Sep 7, 2011 at 6:19 PM, Dave Reisner <d@falconindy.com> wrote:
> Check for the existance of a partial download of a package file before
> jumping to delta calculations. Currently, if there were 10MiB remaining
> in a 100MiB the values passed to the front end do not reflect this.
>
> The frontend accounts for this change in the verbose target display by
> using alpm_pkg_download_size() instead of alpm_pkg_get_size(). We also
> change the label in the final column from a vague "Size" to a more
> descriptive "Download Size"
No can do, or at least not in this same patch, and not this simply.
Give it a spin with a -R or -U operation and you've made the column
completely worthless. It should be a separate patch anyway.

> Refactored from an old patch originally by Dan.
>
> Signed-off-by: Dave Reisner <dreisner@archlinux.org>
> ---
> *lib/libalpm/sync.c | * 29 ++++++++++++++++++++++++-----
> *src/pacman/util.c *| * *4 ++--
> *2 files changed, 26 insertions(+), 7 deletions(-)
>
> diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
> index e2562c0..471bbe7 100644
> --- a/lib/libalpm/sync.c
> +++ b/lib/libalpm/sync.c
> @@ -284,7 +284,8 @@ alpm_list_t SYMEXPORT *alpm_find_group_pkgs(alpm_list_t *dbs,
> **/
> *static int compute_download_size(alpm_pkg_t *newpkg)
> *{
> - * * * char *fpath;
> + * * * const char *fname;
> + * * * char *fpath, *fnamepart = NULL;
> * * * *off_t size = 0;
> * * * *alpm_handle_t *handle = newpkg->handle;
>
> @@ -295,11 +296,26 @@ static int compute_download_size(alpm_pkg_t *newpkg)
> * * * *}
>
> * * * *ASSERT(newpkg->filename != NULL, RET_ERR(handle, ALPM_ERR_PKG_INVALID_NAME, -1));
> - * * * fpath = _alpm_filecache_find(handle, newpkg->filename);
> + * * * fname = newpkg->filename;
> + * * * fpath = _alpm_filecache_find(handle, fname);
>
> + * * * /* downloaded file exists, so there's nothing to grab */
> * * * *if(fpath) {
> - * * * * * * * FREE(fpath);
> * * * * * * * *size = 0;
> + * * * * * * * goto finish;
> + * * * }
> +
> + * * * CALLOC(fnamepart, strlen(fname) + 6, sizeof(char), return -1);
> + * * * sprintf(fnamepart, "%s.part", fname);
> + * * * fpath = _alpm_filecache_find(handle, fnamepart);
> + * * * if(fpath) {
> + * * * * * * * struct stat st;
> + * * * * * * * if(stat(fpath, &st) == 0) {
> + * * * * * * * * * * * /* subtract the size of the .part file */
> + * * * * * * * * * * * _alpm_log(handle, ALPM_LOG_DEBUG, "using (package - .part) size
");
> + * * * * * * * * * * * size = newpkg->size - st.st_size;
> + * * * * * * * * * * * size = size < 0 ? 0 : size;
> + * * * * * * * }
stat() shouldn't fail, but if it does, you've left size set to 0. This
seems wrong. If you bump the struct stat def up to the beginning of
the function, you could just run if(fpath && stat(xxx) == 0) { all in
the same conditional.

> * * * *} else if(handle->usedelta) {
> * * * * * * * *off_t dltsize;
>
> @@ -315,15 +331,18 @@ static int compute_download_size(alpm_pkg_t *newpkg)
> * * * * * * * * * * * *alpm_list_free(newpkg->delta_path);
> * * * * * * * * * * * *newpkg->delta_path = NULL;
> * * * * * * * *}
> - * * * } else {
> - * * * * * * * size = newpkg->size;
I'm confused- where do we now set the size to the full compressed size
if nothing was found? Not sure why this disappears.
> * * * *}
>
> +finish:
> * * * *_alpm_log(handle, ALPM_LOG_DEBUG, "setting download size %jd for pkg %s
",
> * * * * * * * * * * * *(intmax_t)size, newpkg->name);
>
> * * * *newpkg->infolevel |= INFRQ_DSIZE;
> * * * *newpkg->download_size = size;
> +
> + * * * FREE(fpath);
> + * * * FREE(fnamepart);
> +
> * * * *return 0;
> *}

Everything below == different patch, as stated above.

> diff --git a/src/pacman/util.c b/src/pacman/util.c
> index 594186f..6963afb 100644
> --- a/src/pacman/util.c
> +++ b/src/pacman/util.c
> @@ -748,7 +748,7 @@ static alpm_list_t *create_verbose_header(int install)
> * * * * * * * *pm_asprintf(&str, "%s", _("New Version"));
> * * * * * * * *res = alpm_list_add(res, str);
> * * * *}
> - * * * pm_asprintf(&str, "%s", _("Size"));
> + * * * pm_asprintf(&str, "%s", _("Download Size"));
> * * * *res = alpm_list_add(res, str);
>
> * * * *return res;
> @@ -779,7 +779,7 @@ static alpm_list_t *create_verbose_row(alpm_pkg_t *pkg, int install)
> * * * *ret = alpm_list_add(ret, str);
>
> * * * */* and size */
> - * * * size = humanize_size(alpm_pkg_get_size(pkg), 'M', &label);
> + * * * size = humanize_size(alpm_pkg_download_size(pkg), 'M', &label);
> * * * *pm_asprintf(&str, "%.2f %s", size, label);
> * * * *ret = alpm_list_add(ret, str);
>
> --
> 1.7.6.1
>
>
>
 

Thread Tools




All times are GMT. The time now is 08:32 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org