On Fri, Sep 30, 2011 at 01:23:37AM +0800, lolilolicon wrote:
> Introduce ext_to_tar_opt() to unify package and source package tarball
> creation.  This requires bsdtar to support the compression options -z,
> -j, -J and -Z.  Note also the 'compress' command is not available in
> Arch (FS#25908), so 'bsdtar -Z' seems to be the only way to support
> .tar.Z archive creation.
> 
> Signed-off-by: lolilolicon <[email protected]>
> ---
>  scripts/makepkg.sh.in |  107 ++++++++++++++++++------------------------------
>  1 files changed, 40 insertions(+), 67 deletions(-)
> 
> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index 86e74a6..75c3730 100644
> --- a/scripts/makepkg.sh.in
> +++ b/scripts/makepkg.sh.in
> @@ -1212,6 +1212,22 @@ check_package() {
>  
>  }
>  
> +# get bsdtar compression flag from extension
> +ext_to_tar_opt() {
> +     local extension=$1 TAR_OPT=
> +     case "$extension" in
> +             *.tar.gz)  TAR_OPT="z" ;;
> +             *.tar.bz2) TAR_OPT="j" ;;
> +             *.tar.xz)  TAR_OPT="J" ;;
> +             *.tar.Z)   TAR_OPT="Z" ;;
> +             *.tar)                 ;;
> +             *) warning "$(gettext "'%s' is not a valid archive 
> extension.")" \
> +             "$extension" ;;
> +     esac
> +
> +     printf '%s' "$TAR_OPT"
> +}
> +

You've failed to account for an unsupported/invalid extension being
passed. We throw a warning, print nothing, and probably end up with a
tar archive called $pkgname-$pkgver-$pkgrel-$arch.pkg.tar.LOLLERCAUST.

>  create_package() {
>       if [[ ! -d $pkgdir ]]; then
>               error "$(gettext "Missing %s directory.")" "pkg/"
> @@ -1253,71 +1269,43 @@ create_package() {
>               fi
>       done
>  
> -     # tar it up
> -     msg2 "$(gettext "Compressing package...")"
> -
> -     local EXT
> -     case "$PKGEXT" in
> -             *tar.gz)  EXT=${PKGEXT%.gz} ;;
> -             *tar.bz2) EXT=${PKGEXT%.bz2} ;;
> -             *tar.xz)  EXT=${PKGEXT%.xz} ;;
> -             *tar.Z)   EXT=${PKGEXT%.Z} ;;
> -             *tar)     EXT=${PKGEXT} ;;
> -             *) warning "$(gettext "'%s' is not a valid archive 
> extension.")" \
> -             "$PKGEXT" ; EXT=$PKGEXT ;;
> -     esac
> -
>       local fullver=$(get_full_version)
>       local pkg_file="$PKGDEST/${nameofpkg}-${fullver}-${PKGARCH}${PKGEXT}"
> -     local ret=0
>  
>       [[ -f $pkg_file ]] && rm -f "$pkg_file"
>       [[ -f $pkg_file.sig ]] && rm -f "$pkg_file.sig"
>  
> +     # tar it up
> +     msg2 "$(gettext "Compressing package...")"
> +     local TAR_OPT=$(ext_to_tar_opt "$PKGEXT")
>       # when fileglobbing, we want * in an empty directory to expand to
>       # the null string rather than itself
>       shopt -s nullglob
> -     # TODO: Maybe this can be set globally for robustness
> -     shopt -s -o pipefail
> -     bsdtar -cf - $comp_files * |
> -     case "$PKGEXT" in
> -         *tar.gz)  gzip -c -f -n ;;
> -         *tar.bz2) bzip2 -c -f ;;
> -         *tar.xz)  xz -c -z - ;;
> -         *tar.Z)   compress -c -f ;;
> -         *tar)     cat ;;
> -     esac > "${pkg_file}" || ret=$?
> -
> -     shopt -u nullglob
> -     shopt -u -o pipefail
> -
> -     if (( ret )); then
> +     if ! bsdtar -c${TAR_OPT}f "$pkg_file" $comp_files *; then
>               error "$(gettext "Failed to create package file.")"
>               exit 1 # TODO: error code
> -     fi
> -
> -     create_signature "$pkg_file"
> -
> -     if (( ! ret )) && [[ ! "$PKGDEST" -ef "${startdir}" ]]; then
> -             rm -f "${pkg_file/$PKGDEST/$startdir}"
> -             ln -s "${pkg_file}" "${pkg_file/$PKGDEST/$startdir}"
> -             ret=$?
> -             if [[ -f $pkg_file.sig ]]; then
> -                     rm -f "${pkg_file/$PKGDEST/$startdir}.sig"
> -                     ln -s "$pkg_file.sig" 
> "${pkg_file/$PKGDEST/$startdir}.sig"
> +     else
> +             create_signature "$pkg_file"
> +             if [[ ! "$PKGDEST" -ef "${startdir}" ]]; then
> +                     rm -f "${pkg_file/$PKGDEST/$startdir}"
> +                     if ! ln -s "${pkg_file}" 
> "${pkg_file/$PKGDEST/$startdir}"
> +                             warning "$(gettext "Failed to create symlink to 
> package file.")"
> +                     fi
> +                     if [[ -f $pkg_file.sig ]]; then
> +                             rm -f "${pkg_file/$PKGDEST/$startdir}.sig"
> +                             if ! ln -s "$pkg_file.sig" 
> "${pkg_file/$PKGDEST/$startdir}.sig"
> +                                     warning "$(gettext "Failed to create 
> symlink to signature file.")"
> +                             fi
> +                     fi
>               fi
>       fi

Unrelated changes here... as far as I can see, we gain nothing from
disturbing this block of code but introducing duplication.

> -
> -     if (( ret )); then
> -             warning "$(gettext "Failed to create symlink to package file.")"
> -     fi
> +     shopt -u nullglob
>  }
>  
>  create_signature() {
>       if [[ $SIGNPKG != 'y' ]]; then
>               return
>       fi
> -     local ret=0
>       local filename="$1"
>       msg "$(gettext "Signing package...")"
>  
> @@ -1326,10 +1314,7 @@ create_signature() {
>               SIGNWITHKEY="-u ${GPGKEY}"
>       fi
>       # The signature will be generated directly in ascii-friendly format
> -     gpg --detach-sign --use-agent ${SIGNWITHKEY} "$filename" &>/dev/null || 
> ret=$?
> -
> -
> -     if (( ! ret )); then
> +     if gpg --detach-sign --use-agent ${SIGNWITHKEY} "$filename" 
> &>/dev/null; then
>               msg2 "$(gettext "Created signature file %s.")" "$filename.sig"
>       else
>               warning "$(gettext "Failed to sign package file.")"
> @@ -1369,35 +1354,23 @@ create_srcpackage() {
>               done < <(sed -n "s/^[[:space:]]*$i=//p" "$BUILDFILE")
>       done
>  
> -     local TAR_OPT
> -     case "$SRCEXT" in
> -             *tar.gz)  TAR_OPT="z" ;;
> -             *tar.bz2) TAR_OPT="j" ;;
> -             *tar.xz)  TAR_OPT="J" ;;
> -             *tar)     TAR_OPT=""  ;;
> -             *) warning "$(gettext "'%s' is not a valid archive 
> extension.")" \
> -             "$SRCEXT" ;;
> -     esac
> -
>       local fullver=$(get_full_version)
>       local pkg_file="$SRCPKGDEST/${pkgbase}-${fullver}${SRCEXT}"
>  
>       # tar it up
>       msg2 "$(gettext "Compressing source package...")"
>       cd "${srclinks}"
> +     local TAR_OPT=$(ext_to_tar_opt "$SRCEXT")
>       if ! bsdtar -c${TAR_OPT}Lf "$pkg_file" ${pkgbase}; then
>               error "$(gettext "Failed to create source package file.")"
>               exit 1 # TODO: error code
>       fi
>  
> -     if (( ! ret )) && [[ ! "$SRCPKGDEST" -ef "${startdir}" ]]; then
> +     elif [[ ! "$SRCPKGDEST" -ef "${startdir}" ]]; then
>               rm -f "${pkg_file/$SRCPKGDEST/$startdir}"
> -             ln -s "${pkg_file}" "${pkg_file/$SRCPKGDEST/$startdir}"
> -             ret=$?
> -     fi
> -
> -     if (( ret )); then
> -             warning "$(gettext "Failed to create symlink to source package 
> file.")"
> +             if ! ln -s "${pkg_file}" "${pkg_file/$SRCPKGDEST/$startdir}"; 
> then
> +                     warning "$(gettext "Failed to create symlink to source 
> package file.")"
> +             fi
>       fi

More churn, here...

>  
>       cd "${startdir}"
> -- 
> 1.7.6.4
> 
> 

Reply via email to