fix: interactive menu no longer crashes on update errors

- Add IN_INTERACTIVE flag to detect interactive mode
- die() now returns to menu instead of exiting in interactive mode
- Update options (1-6) run with 'set +e' to prevent crash on errors
- 'set -e' restored after update completes
- Errors are logged and shown as warnings, menu keeps running
This commit is contained in:
root
2026-06-25 20:17:58 +02:00
parent 2a8ca6dbc7
commit 2c079c125c
+13 -6
View File
@@ -219,11 +219,18 @@ warn() { echo -e " ${C_YELLOW}${E_WARN}${C_RESET} $1"; WARNINGS=$((WARNIN
fail() { echo -e " ${C_RED}${E_CROSS}${C_RESET} $1"; log_write "FAIL" "$1"; } fail() { echo -e " ${C_RED}${E_CROSS}${C_RESET} $1"; log_write "FAIL" "$1"; }
debug() { [ "$VERBOSE" = true ] && echo -e " ${C_DIM}${E_DOT} [DEBUG] $1${C_RESET}"; log_write "DEBUG" "$1"; } debug() { [ "$VERBOSE" = true ] && echo -e " ${C_DIM}${E_DOT} [DEBUG] $1${C_RESET}"; log_write "DEBUG" "$1"; }
IN_INTERACTIVE=false
die() { die() {
echo "" echo ""
echo -e " ${C_BG_RED}${C_WHITE}${C_BOLD} FATAL ERROR ${C_RESET}" echo -e " ${C_BG_RED}${C_WHITE}${C_BOLD} FATAL ERROR ${C_RESET}"
echo -e " ${C_RED}${E_CROSS} $1${C_RESET}" echo -e " ${C_RED}${E_CROSS} $1${C_RESET}"
log_write "FATAL" "$1" log_write "FATAL" "$1"
if [ "$IN_INTERACTIVE" = true ]; then
WARNINGS=$((WARNINGS + 1))
echo -e " ${C_YELLOW}Returning to menu...${C_RESET}"
return 1 2>/dev/null || true
fi
cleanup_notify_failure "$1" cleanup_notify_failure "$1"
cursor_show cursor_show
exit 1 exit 1
@@ -1365,12 +1372,12 @@ cmd_interactive() {
echo -en " ${C_CYAN}${C_BOLD}Select [0-19]${C_RESET}: " echo -en " ${C_CYAN}${C_BOLD}Select [0-19]${C_RESET}: "
local choice; read -r choice local choice; read -r choice
case "$choice" in case "$choice" in
1) SELECTIVE_UPDATE=""; info "Starting quick update..."; cmd_update ;; 1) SELECTIVE_UPDATE=""; IN_INTERACTIVE=true; set +e; info "Starting quick update..."; cmd_update; set -e; IN_INTERACTIVE=false ;;
2) SELECTIVE_UPDATE=""; pick_branch_and_update ;; 2) SELECTIVE_UPDATE=""; IN_INTERACTIVE=true; set +e; pick_branch_and_update; set -e; IN_INTERACTIVE=false ;;
3) SELECTIVE_UPDATE="emulator"; pick_branch_and_update ;; 3) SELECTIVE_UPDATE="emulator"; IN_INTERACTIVE=true; set +e; pick_branch_and_update; set -e; IN_INTERACTIVE=false ;;
4) SELECTIVE_UPDATE="client"; pick_branch_and_update ;; 4) SELECTIVE_UPDATE="client"; IN_INTERACTIVE=true; set +e; pick_branch_and_update; set -e; IN_INTERACTIVE=false ;;
5) SELECTIVE_UPDATE="renderer"; pick_branch_and_update ;; 5) SELECTIVE_UPDATE="renderer"; IN_INTERACTIVE=true; set +e; pick_branch_and_update; set -e; IN_INTERACTIVE=false ;;
6) SELECTIVE_UPDATE="configs"; pick_branch_and_update ;; 6) SELECTIVE_UPDATE="configs"; IN_INTERACTIVE=true; set +e; pick_branch_and_update; set -e; IN_INTERACTIVE=false ;;
7) 7)
echo "" echo ""
echo -e " ${C_BOLD}Current: ${C_CYAN}${NITRO_BRANCH:-main}${C_RESET}" echo -e " ${C_BOLD}Current: ${C_CYAN}${NITRO_BRANCH:-main}${C_RESET}"