[pacman-dev] [PATCH] makepkg: unify tarball creation
lolilolicon
lolilolicon at gmail.com
Thu Sep 29 13:56:33 EDT 2011
On Fri, Sep 30, 2011 at 1:40 AM, Dave Reisner <d at falconindy.com> wrote:
> 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 <lolilolicon at gmail.com>
>> ---
>> 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.
>
I don't see any problem if that's what the user wants- a funny name maybe,
a tar nontheless, no?
>> 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.
What do you mean by duplication? This just eliminates the use of $ret...
Did this because I noticed ret was used uninitialized, but yes it's unrelated...
>
>> -
>> - 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
>>
>>
>
>
More information about the pacman-dev
mailing list