On 08/06/14 12:18, Yanus Poluektovich wrote:
> If pv is installed, use it to provide progress indication for package 
> compression stage.
> 
> Signed-off-by: Yanus Poluektovich <[email protected]>
> ---
>  scripts/makepkg.sh.in | 27 +++++++++++++++++++--------
>  1 file changed, 19 insertions(+), 8 deletions(-)
> 
> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index 96e5349..a4eab07 100644
> --- a/scripts/makepkg.sh.in
> +++ b/scripts/makepkg.sh.in
> @@ -1971,7 +1971,11 @@ create_package() {
>       pkgarch=$(get_pkg_arch)
>       write_pkginfo > .PKGINFO
>  
> -     local comp_files=('.PKGINFO')
> +     # when fileglobbing, we want * in an empty directory to expand to
> +     # the null string rather than itself
> +     shopt -s nullglob
> +
> +     local comp_files=( * '.PKGINFO' )
>  

No.  We want the .PKGINFO file to appear first in the command line (and
thus the tarball).  Install file should be second. I'd also suggest that
the comp_files change is a completely separate patch.

I'm feeling too lazy to look at pv to review the rest of the patch.

>       # check for changelog/install files
>       for i in 'changelog/.CHANGELOG' 'install/.INSTALL'; do
> @@ -1993,23 +1997,30 @@ create_package() {
>       [[ -f $pkg_file ]] && rm -f "$pkg_file"
>       [[ -f $pkg_file.sig ]] && rm -f "$pkg_file.sig"
>  
> -     # when fileglobbing, we want * in an empty directory to expand to
> -     # the null string rather than itself
> -     shopt -s nullglob
> -
>       msg2 "$(gettext "Generating .MTREE file...")"
>       bsdtar -czf .MTREE --format=mtree \
>               
> --options='!all,use-set,type,uid,gid,mode,time,size,md5,sha256,link' \
> -             "${comp_files[@]}" *
> +             "${comp_files[@]}"
>       comp_files+=(".MTREE")
>  
>       msg2 "$(gettext "Compressing package...")"
>       # TODO: Maybe this can be set globally for robustness
>       shopt -s -o pipefail
> +
> +     local uncompressed_pipe=(cat)
> +     local compressed_pipe=(cat)
> +     if type -P pv >/dev/null; then
> +             local uncompressed_size=$( grep -E '^size =' .PKGINFO )
> +             uncompressed_size=${uncompressed_size##*[^0-9]}
> +             uncompressed_pipe=(pv -c -N uncompressed -perab -s 
> "$uncompressed_size")
> +             compressed_pipe=(pv -c -N compressed -trab)
> +     fi
> +
>       # bsdtar's gzip compression always saves the time stamp, making one
>       # archive created using the same command line distinct from another.
>       # Disable bsdtar compression and use gzip -n for now.
> -     bsdtar -cf - "${comp_files[@]}" * |
> +     bsdtar -cf - "${comp_files[@]}" |
> +     "${uncompressed_pipe[@]}" |
>       case "$PKGEXT" in
>               *tar.gz)  ${COMPRESSGZ[@]:-gzip -c -f -n} ;;
>               *tar.bz2) ${COMPRESSBZ2[@]:-bzip2 -c -f} ;;
> @@ -2020,7 +2031,7 @@ create_package() {
>               *tar)     cat ;;
>               *) warning "$(gettext "'%s' is not a valid archive 
> extension.")" \
>                       "$PKGEXT"; cat ;;
> -     esac > "${pkg_file}" || ret=$?
> +     esac | "${compressed_pipe[@]}" > "${pkg_file}" || ret=$?
>  
>       shopt -u nullglob
>       shopt -u -o pipefail
> 


Reply via email to