[pacman-dev] makepkg: exit non-zero in case of install error
Daniel Hahler
genml+pacman-dev at thequod.de
Thu Mar 31 14:03:37 UTC 2016
The following failure will make makepkg still exit with return code 0:
% PKGEXT=.tar makepkg -srief
...
==> Installing package awesome-git with pacman -U...
error: failed to init transaction (unable to lock database)
error: could not lock database: File exists
if you're sure a package manager is not already
running, you can remove /var/lib/pacman/db.lck
==> WARNING: Failed to install built package(s).
The code:
if ! run_pacman -U "${pkglist[@]}"; then
warning "$(gettext "Failed to install built package(s).")"
return 0
fi
It seems to be done intentionally:
tree 2b824312ec75e6bf3e3247ebd28d5335f61d9190
parent 7370fd595bc0447e7c17135e3a27cc3ae64015d4
author Allan McRae <allan at archlinux.org> Sun Mar 29 16:49:57 2009 +1000
committer Allan McRae <allan at archlinux.org> Sun Mar 29 16:49:57 2009 +1000
makepkg: do not bail on failure to install built package
Fixes FS#13417. Do no exit makepkg on a failure to install the
built package(s). This allows clean-up to still occur.
Signed-off-by: Allan McRae <allan at archlinux.org>
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index ff2663b..716c5a9 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1071,10 +1071,16 @@ install_package() {
pkglist="${pkglist} $PKGDEST/${pkg}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}"
done
+ local ret=0
if [ "$ASROOT" -eq 0 ]; then
- sudo pacman $PACMAN_OPTS -U ${pkglist} || exit $?
+ sudo pacman $PACMAN_OPTS -U ${pkglist} || ret=$?
else
- pacman $PACMAN_OPTS -U ${pkglist} || exit $?
+ pacman $PACMAN_OPTS -U ${pkglist} || ret=$?
+ fi
+
+ if [ $ret -ne 0 ]; then
+ warning "$(gettext "Failed to install built package(s).")"
+ return 0
fi
}
Since the whole purpose of this appears to be running the clean-up in
case of errors, the following would work:
--- /usr/bin/makepkg 2016-03-31 15:59:32.028531972 +0200
+++ /tmp/makepkg.new 2016-03-31 15:59:27.255110641 +0200
@@ -1426,7 +1427,7 @@
if ! run_pacman -U "${pkglist[@]}"; then
warning "$(gettext "Failed to install built package(s).")"
- return 0
+ return 1
fi
}
@@ -2393,7 +2394,7 @@
msg "$(gettext "Finished making: %s")" "$pkgbase $basever ($(date))"
-install_package
+install_package || exit $?
exit 0 #E_OK
(just a proof of concept, there are other calls to install_package)
My use case is a script to rebuild and install a package locally, and
this should abort also in case of install failures.
The workaround might be to not use `-i` with `makepkg`, but run `pacman`
on the generated package instead.
Thanks,
Daniel.
More information about the pacman-dev
mailing list