diff --git a/update-Nitrov3.sh b/update-Nitrov3.sh index 3c15813..3816630 100755 --- a/update-Nitrov3.sh +++ b/update-Nitrov3.sh @@ -31,12 +31,12 @@ if [ -t 1 ] && command -v tput &>/dev/null && [ "$(tput colors 2>/dev/null || ec C_RED="\033[1;31m" C_GREEN="\033[1;32m" C_YELLOW="\033[1;33m" C_BLUE="\033[1;34m" C_MAGENTA="\033[1;35m" C_CYAN="\033[1;36m" C_WHITE="\033[1;37m" C_GOLD="\033[38;5;220m" - C_BG_RED="\033[41m" C_BG_GREEN="\033[42m" C_BG_YELLOW="\033[43m" + C_BG_RED="\033[41m" C_BG_GREEN="\033[42m" C_BG_BLUE="\033[44m" C_BG_MAGENTA="\033[45m" C_BG_CYAN="\033[46m" else C_RESET="" C_BOLD="" C_DIM="" C_RED="" C_GREEN="" C_YELLOW="" C_BLUE="" C_MAGENTA="" C_CYAN="" C_WHITE="" C_GOLD="" - C_BG_RED="" C_BG_GREEN="" C_BG_YELLOW="" C_BG_BLUE="" C_BG_MAGENTA="" C_BG_CYAN="" + C_BG_RED="" C_BG_GREEN="" C_BG_BLUE="" C_BG_MAGENTA="" C_BG_CYAN="" fi # ============================================================================= @@ -59,7 +59,6 @@ fi # ============================================================================= # STATE # ============================================================================= -DRY_RUN=false SELECTIVE_UPDATE="" HAD_UPDATES=false NITRO_BUILT=false @@ -99,20 +98,6 @@ NITRO_BRANCH="${NITRO_BRANCH:-main}" MIN_DISK_GB="${NITRO_MIN_DISK_GB:-5}" HEALTH_RETRIES="${NITRO_HEALTH_RETRIES:-12}" HEALTH_INTERVAL="${NITRO_HEALTH_INTERVAL:-5}" - -if [ -z "${NITRO_SITE_URL:-}" ] && [ -n "${APP_URL:-}" ]; then NITRO_SITE_URL="$APP_URL"; fi -case "${NITRO_SITE_URL:-}" in - https://*) NITRO_WS_PROTO="wss://" ; NITRO_DOMAIN="${NITRO_SITE_URL#https://}" ;; - http://*) NITRO_WS_PROTO="ws://" ; NITRO_DOMAIN="${NITRO_SITE_URL#http://}" ;; - *) NITRO_WS_PROTO="wss://" ; NITRO_DOMAIN="${NITRO_SITE_URL:-}" ;; -esac -NITRO_IMAGE_LIBRARY_URL="${NITRO_IMAGE_LIBRARY_URL:-${NITRO_SITE_URL:-}/gamedata/c_images/}" -NITRO_HOF_FURNITURE_URL="${NITRO_HOF_FURNITURE_URL:-${NITRO_SITE_URL:-}/gamedata/icons}" -NITRO_API_URL="${NITRO_API_URL:-${NITRO_SITE_URL:-}}" -NITRO_SOCKET_URL="${NITRO_SOCKET_URL:-${NITRO_WS_PROTO}ws.${NITRO_DOMAIN}}" -NITRO_GAMEDATA_URL="${NITRO_GAMEDATA_URL:-${NITRO_SITE_URL:-}/gamedata}" -NITRO_ASSET_URL="${NITRO_ASSET_URL:-${NITRO_SITE_URL:-}/gamedata/bundled}" -NITRO_FURNI_ASSET_ICON_URL="${NITRO_FURNI_ASSET_ICON_URL:-${NITRO_SITE_URL:-}/gamedata/icons/%libname%%param%_icon.png}" MYSQL_CRED="-h $DB_HOST -P $DB_PORT -u $DB_USER --ssl-verify-server-cert=OFF" [ -n "$DB_PASS" ] && export MYSQL_PWD="$DB_PASS" @@ -124,7 +109,6 @@ info() { echo -e " ${C_BLUE}${E_ARROW}${C_RESET} $1"; log_write "INFO" "$1"; ok() { echo -e " ${C_GREEN}${E_OK}${C_RESET} $1"; log_write "OK" "$1"; } warn() { echo -e " ${C_YELLOW}${E_WARN}${C_RESET} $1"; WARNINGS=$((WARNINGS + 1)); log_write "WARN" "$1"; } fail() { echo -e " ${C_RED}${E_FAIL}${C_RESET} $1"; log_write "FAIL" "$1"; } -debug() { echo -e " ${C_DIM}${E_DOT} $1${C_RESET}"; log_write "DEBUG" "$1"; } die() { echo "" @@ -239,6 +223,12 @@ detect_branches() { echo "$result" } +load_branches() { + local arr="$1" + eval "$arr=()" + while IFS= read -r b; do [ -n "$b" ] && eval "$arr+=(\"\$b\")"; done < <(detect_branches) +} + detect_best_branch() { local repo="$1" preferred="$2" cd "$repo" 2>/dev/null || { echo "main"; return; } @@ -749,7 +739,7 @@ cmd_compare() { step 1 1 "Branch Comparison" echo "" local branches=() - while IFS= read -r b; do [ -n "$b" ] && branches+=("$b"); done < <(detect_branches) + load_branches branches [ ${#branches[@]} -lt 2 ] && { warn "Need 2+ branches (found ${#branches[@]})"; return; } echo -e " ${C_BOLD}Branches:${C_RESET}" local i=1 @@ -804,7 +794,7 @@ pick_branch_and_update() { renderer) mode_label="Renderer Only" ;; configs) mode_label="Configs Only" ;; esac local branches=() - while IFS= read -r b; do [ -n "$b" ] && branches+=("$b"); done < <(detect_branches) + load_branches branches echo "" echo -e " ${C_BOLD}${C_CYAN}Update: ${C_GREEN}$mode_label${C_RESET}" echo "" @@ -833,7 +823,7 @@ cmd_interactive() { while true; do clear local branches=() - while IFS= read -r b; do [ -n "$b" ] && branches+=("$b"); done < <(detect_branches) + load_branches branches echo -e "${C_CYAN}" echo "" @@ -957,8 +947,6 @@ show_help() { echo -e " ${C_CYAN}--branch, -b${C_RESET} Branch (auto-detects)" echo -e " ${C_CYAN}--url, -u${C_RESET} Site URL" echo -e " ${C_CYAN}--only=${C_RESET} emulator|client|renderer|configs" - echo -e " ${C_CYAN}--dry-run, -n${C_RESET} Preview only" - echo -e " ${C_CYAN}--verbose, -v${C_RESET} Debug output" echo -e " ${C_CYAN}--help, -h${C_RESET} Help" echo -e " ${C_CYAN}--version, -V${C_RESET} Version" echo "" @@ -988,8 +976,6 @@ main() { clean|cl) cmd="clean" ;; help|-h|--help) cmd="help" ;; version|-V|--version) echo "v${SCRIPT_VERSION}"; exit 0 ;; - --dry-run|-n) DRY_RUN=true ;; - --verbose|-v) ;; # accepted but not used yet --branch|-b) shift; NITRO_BRANCH="$1" ;; --url|-u) shift; NITRO_SITE_URL="$1" ;; --only=*) SELECTIVE_UPDATE="${1#*=}" ;; @@ -1000,6 +986,21 @@ main() { done [ -z "$cmd" ] && cmd="interactive" + # Derive URLs after CLI parsing (--url may have changed NITRO_SITE_URL) + if [ -z "${NITRO_SITE_URL:-}" ] && [ -n "${APP_URL:-}" ]; then NITRO_SITE_URL="$APP_URL"; fi + case "${NITRO_SITE_URL:-}" in + https://*) NITRO_WS_PROTO="wss://" ; NITRO_DOMAIN="${NITRO_SITE_URL#https://}" ;; + http://*) NITRO_WS_PROTO="ws://" ; NITRO_DOMAIN="${NITRO_SITE_URL#http://}" ;; + *) NITRO_WS_PROTO="wss://" ; NITRO_DOMAIN="${NITRO_SITE_URL:-}" ;; + esac + NITRO_IMAGE_LIBRARY_URL="${NITRO_IMAGE_LIBRARY_URL:-${NITRO_SITE_URL:-}/gamedata/c_images/}" + NITRO_HOF_FURNITURE_URL="${NITRO_HOF_FURNITURE_URL:-${NITRO_SITE_URL:-}/gamedata/icons}" + NITRO_API_URL="${NITRO_API_URL:-${NITRO_SITE_URL:-}}" + NITRO_SOCKET_URL="${NITRO_SOCKET_URL:-${NITRO_WS_PROTO}ws.${NITRO_DOMAIN}}" + NITRO_GAMEDATA_URL="${NITRO_GAMEDATA_URL:-${NITRO_SITE_URL:-}/gamedata}" + NITRO_ASSET_URL="${NITRO_ASSET_URL:-${NITRO_SITE_URL:-}/gamedata/bundled}" + NITRO_FURNI_ASSET_ICON_URL="${NITRO_FURNI_ASSET_ICON_URL:-${NITRO_SITE_URL:-}/gamedata/icons/%libname%%param%_icon.png}" + # Log redirect exec > >(tee -a "$LOG_FILE") 2>&1