fix: errexit fix

This commit is contained in:
2025-12-26 17:10:38 -05:00
parent d44c761978
commit c682ef1049

81
leaf
View File

@@ -1,5 +1,6 @@
#!/bin/bash
set -e
shopt -s inherit_errexit 2>/dev/null || true
RED_COLOR="\e[1;31m"
PURPLE_COLOR="\e[1;35m"
@@ -404,6 +405,44 @@ leaf_update_environment() {
[ ! -r /etc/profile ] || source /etc/profile
}
leaf_run_phase() {
# usage: leaf_run_phase <phase_name> <func_name>
local phase="$1" fn="$2"
LEAF_PHASE_RC=0
declare -F "$fn" >/dev/null || {
LEAF_PHASE_RC=127
return 0
}
echo -e "${GREEN_COLOR}>>> ${PKG_PREFIX}/${PKG_NAME}: ${phase}${CLEAR_COLOR}"
set +e
(
set -eE -o pipefail
"$fn"
)
LEAF_PHASE_RC=$?
set -e
return 0
}
leaf_phase_must() {
local phase="$1" fn="$2" msg="$3"
leaf_run_phase "$phase" "$fn"
if [ "${LEAF_PHASE_RC}" -ne 0 ]; then
leaf_error "${msg:-${fn} failed (rc=${LEAF_PHASE_RC})}"
fi
}
leaf_phase_try() {
# just run, caller checks $LEAF_PHASE_RC
leaf_run_phase "$1" "$2"
}
leaf_prepare_package() {
local url sourcefile index _md5sum local_src
@@ -453,22 +492,42 @@ leaf_prepare_package() {
popd >/dev/null || true
echo "Sources ready."
src_prepare
leaf_phase_must "Preparing" src_prepare "Prepare faild."
}
leaf_build_package() {
leaf_prepare_package
src_build
leaf_phase_must "Building" src_build "Build faild."
if ! src_check; then
if [ "${FORCE_INSTALL}" == "1" ]; then
leaf_phase_try "Checking" src_check
if [ "${LEAF_PHASE_RC}" -ne 0 ]; then
if [ "${FORCE_INSTALL:-0}" = "1" ]; then
echo -e "${RED_COLOR}* Tests failed, but is in force-install mode.${CLEAR_COLOR}"
else
leaf_error "Tests failed, please check. Aborting installation."
fi
fi
src_install
## run tests (strict: any failing command inside src_check fails the whole check)
#local _check_rc=0
#set +e
#( set -e; src_check )
#_check_rc=$?
#set -e
#
#if [ "${_check_rc}" -ne 0 ]; then
# if [ "${FORCE_INSTALL}" = "1" ]; then
# echo -e "${RED_COLOR}* Tests failed, but is in force-install mode.${CLEAR_COLOR}"
# else
# leaf_error "Tests failed, please check. Aborting installation."
# fi
#fi
# ensure pkgdir exists
rm -rf -- "${pkgdir}"
install -dm755 -- "${pkgdir}"
leaf_phase_must "Installing" src_install "Installing failed."
local _option
for _option in $(echo ${!BUILD_OPTIONS[*]}); do
if [[ x"${_option}" == x"strip" ]] && [[ x"${BUILD_OPTIONS[$_option]}" == x"1" ]]; then
@@ -492,9 +551,9 @@ leaf_install_package() {
# trace need to to in the same fakeroot
leaf_trace_package "${pkgdir}"
# ROOT starts
src_preinstall
leaf_phase_must "Preinstall" src_preinstall "Preinstall failed."
leaf_merge_package "${pkgdir}"
src_postinstall
leaf_phase_must "Postinstall" src_postinstall "Postinstall failed."
leaf_update_package_database add "${PKG_PREFIX}/${PKG_NAME}"
leaf_update_environment
# ROOT ends
@@ -507,9 +566,9 @@ leaf_dirct-install_package() {
# trace need to to in the same fakeroot
leaf_trace_package "${pkgdir}"
# ROOT starts
src_preinstall
leaf_phase_must "Preinstall" src_preinstall "Preinstall failed."
leaf_merge_package "${pkgdir}"
src_postinstall
leaf_phase_must "Postinstall" src_postinstall "Postinstall failed."
leaf_update_package_database add "${PKG_PREFIX}/${PKG_NAME}"
leaf_update_environment
# ROOT ends
@@ -525,7 +584,7 @@ leaf_remove_package() {
[ -n "$(grep "${PKG_PREFIX}/${PKG_NAME}" ${INSTALLED_PACKAGES})" ] || {
leaf_error "Package ${PKG_PREFIX}/${PKG_NAME} is NOT installed"
}
src_preremove
leaf_phase_must "Preremove" src_preremove "Preremove failed."
local _file _link _directory _etc_backup_path _relative_path _backup_etc=false
_etc_backup_path="/etc/.leaf_backup/${PKGNAME}_$(date +%Y%m%d%H%M%S)"
cat "${TRACE_DIR}/${PKG_PREFIX}/${PKG_NAME}/FILES" | while read -r _file; do
@@ -549,7 +608,7 @@ leaf_remove_package() {
rmdir --ignore-fail-on-non-empty "${_directory}"
fi
done
src_postremove
leaf_phase_must "Postremove" src_postremove "Postremove failed."
leaf_invoke_hooks remove
rm -rf "${TRACE_DIR}/${PKG_PREFIX}/${PKG_NAME}"
leaf_update_package_database delete "${PKG_PREFIX}/${PKG_NAME}"