diff options
author | Dave Reisner <d@falconindy.com> | 2012-01-01 18:49:59 -0500 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2012-01-18 11:06:51 +0100 |
commit | 2d79191c97e8ee965bfea1feef03de26c839dc8a (patch) | |
tree | 2f5c6ad954564191a09160dc36b00143c4c82ddd /commitpkg.in | |
parent | 5b3ca82ae5934cf6625911d4c1d11c5fad63aa92 (diff) | |
download | devtools-2d79191c97e8ee965bfea1feef03de26c839dc8a.tar.xz |
commitpkg: behavior more sanely in searching for built pkgs
In the case of a .pkg.tar.xz and a .pkg.tar.gz existing in the same
directory, all commitpkg would say is:
==> WARNING: Could not find . Skipping x86_64
Upon digging into the logic, we did a few things poorly, mostly in
getpkgfile:
- getpkgfile tried to die in a subshell (within the command substituion
assignment to 'pkgfile'). This will never work.
- We assumed that proper glob expansion happened when we received
exactly 1 arg. This isn't necessarily true without nullglob in effect.
- We dumped the real error (spewed by getpkgfile) to /dev/null.
- We checked for the package twice in both $PWD and $DESTDIR/.
- We checked for file existance multiple times.
Address this by:
- not hiding errors. revamp the wording a little bit to make it more
obvious why we failed, particularly in the case of a glob expanding to
more than 1 file. Logic here is simplified to pointing out the failure
cases of 0 and >1.
- setting nullglob so the number of arguments passed into getpkgfile is
meaningful from a 'did it decisively resolve' point of view.
- not trying to exit the entire script from a subshell. Just return a
value (and use it).
- avoiding the package file existance check afterwards. this is a
freebie from getpkgfile when the glob passed fails to expand.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
Diffstat (limited to 'commitpkg.in')
-rw-r--r-- | commitpkg.in | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/commitpkg.in b/commitpkg.in index c298256..9cc4912 100644 --- a/commitpkg.in +++ b/commitpkg.in @@ -3,13 +3,19 @@ m4_include(lib/common.sh) getpkgfile() { - if [[ ${#} -ne 1 ]]; then - die 'No canonical package found!' - elif [[ ! -f $1 ]]; then - die "Package ${1} not found!" - fi + case $# in + 0) + error 'No canonical package found!' + return 1 + ;; + [!1]) + error 'Failed to canonicalize package name -- multiple packages found:' + msg2 '%s' "$@" + return 1 + ;; + esac - echo ${1} + echo "$1" } # Source makepkg.conf; fail if it is not found @@ -127,15 +133,10 @@ for _arch in ${arch[@]}; do for _pkgname in ${pkgname[@]}; do fullver=$(get_full_version $_pkgname) - pkgfile=$(getpkgfile "$_pkgname-$fullver-${_arch}".pkg.tar.?z 2>/dev/null) - pkgdestfile=$(getpkgfile "$PKGDEST/$_pkgname-$fullver-${_arch}".pkg.tar.?z 2>/dev/null) - if [[ -f $pkgfile ]]; then - pkgfile="./$pkgfile" - elif [[ -f $pkgdestfile ]]; then - pkgfile="$pkgdestfile" - else - warning "Could not find ${pkgfile}. Skipping ${_arch}" + if ! pkgfile=$(shopt -s nullglob; + getpkgfile "${DESTDIR+$DESTDIR/}$_pkgname-$fullver-${_arch}".pkg.tar.?z); then + warning "Skipping $_pkgname-$fullver-$_arch: failed to locate package file" skip_arches+=($_arch) continue 2 fi |