Files

59 lines
1.2 KiB
Bash
Raw Permalink Normal View History

#!/usr/bin/env bash
# Error handling functions
# Usage: source "$SCRIPT_DIR/lib/common/error-handling.sh"
# Source logging if not already sourced
[ -z "$(type -t log_error)" ] && source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/logging.sh"
# Error exit function
error_exit() {
local message="$1"
local exit_code="${2:-1}"
log_error "$message"
exit "$exit_code"
}
# Cleanup function registry
declare -a CLEANUP_FUNCTIONS=()
# Register cleanup function
register_cleanup() {
local func="$1"
CLEANUP_FUNCTIONS+=("$func")
}
# Execute cleanup functions
cleanup_on_exit() {
local exit_code=$?
for func in "${CLEANUP_FUNCTIONS[@]}"; do
if type -t "$func" >/dev/null; then
"$func" || true
fi
done
exit $exit_code
}
# Setup error traps
setup_error_traps() {
# Trap ERR - command failures
trap 'error_exit "Line $LINENO: Command failed: $BASH_COMMAND" $?' ERR
# Trap EXIT - cleanup
trap 'cleanup_on_exit' EXIT
# Trap INT - Ctrl+C
trap 'log_warn "Interrupted by user"; exit 130' INT
# Trap TERM - termination
trap 'log_warn "Terminated"; exit 143' TERM
}
# Check if error handling is enabled
is_error_handling_enabled() {
[[ $- == *e* ]]
}