[pacman-dev] [PATCH] makepkg: unify tarball creation
lolilolicon
lolilolicon at gmail.com
Thu Sep 29 13:23:37 EDT 2011
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"
+}
+
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
-
- 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
cd "${startdir}"
--
1.7.6.4
More information about the pacman-dev
mailing list