You've already forked Atomcms-edit
fix: flexible branch handling - works with any branch name
- Add detect_branch() function with smart fallback per repo - Auto-detect branches: tries exact match, capitalization variants, development/Development, main/master, remote branches - Never crashes on missing branch - warns and skips instead - Remove hardcoded branch validation (now accepts any branch name) - Add branch switcher to interactive menu (option 6) - Shows current branch and site URL in menu header - git_update() now uses git pull origin instead of generic pull - Update help text for --branch option
This commit is contained in:
+99
-33
@@ -393,14 +393,10 @@ preflight() {
|
|||||||
export NITRO_SITE_URL
|
export NITRO_SITE_URL
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Branch
|
# Branch — accept any branch name, auto-detect per repo later
|
||||||
if [ -z "${NITRO_BRANCH:-}" ]; then
|
if [ -z "${NITRO_BRANCH:-}" ]; then
|
||||||
read -r -p " Enter branch (main/dev) [main]: " NITRO_BRANCH
|
read -r -p " Enter branch [main]: " NITRO_BRANCH
|
||||||
NITRO_BRANCH="${NITRO_BRANCH:-main}"
|
NITRO_BRANCH="${NITRO_BRANCH:-main}"
|
||||||
case "$NITRO_BRANCH" in
|
|
||||||
main|dev|master|staging) ;;
|
|
||||||
*) die "Invalid branch '$NITRO_BRANCH'. Use main, dev, master, or staging." ;;
|
|
||||||
esac
|
|
||||||
export NITRO_BRANCH
|
export NITRO_BRANCH
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -1619,22 +1615,69 @@ clean_node_modules() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
detect_branch() {
|
||||||
|
local repo="$1" preferred="$2"
|
||||||
|
cd "$repo" 2>/dev/null || { echo "main"; return; }
|
||||||
|
|
||||||
|
# Try exact match first
|
||||||
|
if git rev-parse --verify "$preferred" &>/dev/null; then
|
||||||
|
echo "$preferred"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Try common variants: dev -> Dev -> development -> Development
|
||||||
|
local variants=("$preferred" "${preferred^}" "development" "Development" "main" "master" "Main" "Master")
|
||||||
|
for v in "${variants[@]}"; do
|
||||||
|
if git rev-parse --verify "$v" &>/dev/null; then
|
||||||
|
echo "$v"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Try remote branches
|
||||||
|
local remote_branch=$(git branch -r 2>/dev/null | grep -oP "origin/\K${preferred}" | head -1 || echo "")
|
||||||
|
if [ -n "$remote_branch" ]; then
|
||||||
|
echo "$remote_branch"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Last resort: current branch or main
|
||||||
|
local current=$(git branch --show-current 2>/dev/null || echo "main")
|
||||||
|
echo "${current:-main}"
|
||||||
|
}
|
||||||
|
|
||||||
git_update() {
|
git_update() {
|
||||||
local repo="$1" branch="$2"
|
local repo="$1" branch="$2"
|
||||||
cd "$repo"
|
cd "$repo" || { warn "Cannot access $repo"; return 1; }
|
||||||
|
|
||||||
git stash --include-untracked 2>/dev/null || true
|
git stash --include-untracked 2>/dev/null || true
|
||||||
local old_head
|
local old_head
|
||||||
old_head=$(git rev-parse HEAD 2>/dev/null || echo "")
|
old_head=$(git rev-parse HEAD 2>/dev/null || echo "")
|
||||||
if ! git checkout "$branch" 2>/dev/null; then
|
|
||||||
local alt="${branch^}"
|
# Detect best available branch
|
||||||
if [ "$alt" != "$branch" ] && git checkout "$alt" 2>/dev/null; then
|
local resolved_branch
|
||||||
info "Branch '$branch' not found, using '$alt' instead"
|
resolved_branch=$(detect_branch "$repo" "$branch")
|
||||||
branch="$alt"
|
|
||||||
else
|
if [ "$resolved_branch" != "$branch" ]; then
|
||||||
die "Branch '$branch' (or '$alt') not found in $repo"
|
info "Branch '$branch' not available in $(basename "$repo"), using '$resolved_branch' instead"
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
git pull 2>/dev/null || die "Git pull failed in $repo"
|
|
||||||
|
if ! git checkout "$resolved_branch" 2>/dev/null; then
|
||||||
|
# Fallback: try to find ANY branch
|
||||||
|
local fallback=$(git branch -r 2>/dev/null | head -1 | sed 's/origin\///' | xargs || echo "main")
|
||||||
|
warn "Could not checkout '$resolved_branch', trying '$fallback'"
|
||||||
|
if ! git checkout "$fallback" 2>/dev/null; then
|
||||||
|
warn "No suitable branch found in $(basename "$repo"), skipping"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
resolved_branch="$fallback"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! git pull origin "$resolved_branch" 2>/dev/null && ! git pull 2>/dev/null; then
|
||||||
|
warn "Git pull failed in $(basename "$repo") (branch: $resolved_branch)"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
[ "$(git rev-parse HEAD 2>/dev/null)" != "$old_head" ]
|
[ "$(git rev-parse HEAD 2>/dev/null)" != "$old_head" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1648,6 +1691,7 @@ cmd_interactive() {
|
|||||||
echo -e " ${C_BOLD}${C_CYAN}╔══════════════════════════════════════════════════════════════╗${C_RESET}"
|
echo -e " ${C_BOLD}${C_CYAN}╔══════════════════════════════════════════════════════════════╗${C_RESET}"
|
||||||
echo -e " ${C_BOLD}${C_CYAN}║ MAIN CONTROL PANEL ║${C_RESET}"
|
echo -e " ${C_BOLD}${C_CYAN}║ MAIN CONTROL PANEL ║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}╠══════════════════════════════════════════════════════════════╣${C_RESET}"
|
echo -e " ${C_CYAN}╠══════════════════════════════════════════════════════════════╣${C_RESET}"
|
||||||
|
echo -e " ${C_CYAN}║${C_RESET} ${C_DIM}Branch: ${C_CYAN}${NITRO_BRANCH:-main}${C_RESET} │ Site: ${C_CYAN}${NITRO_SITE_URL:-?}${C_RESET} ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}1)${C_RESET} ${E_ROCKET} Full Update ${C_DIM}(pull + build + deploy)${C_RESET} ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}1)${C_RESET} ${E_ROCKET} Full Update ${C_DIM}(pull + build + deploy)${C_RESET} ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}2)${C_RESET} ${E_GEAR} Update Emulator Only ${C_DIM}(Java backend)${C_RESET} ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}2)${C_RESET} ${E_GEAR} Update Emulator Only ${C_DIM}(Java backend)${C_RESET} ${C_CYAN}║${C_RESET}"
|
||||||
@@ -1655,14 +1699,15 @@ cmd_interactive() {
|
|||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}4)${C_RESET} ${E_GEAR} Update Renderer Only ${C_DIM}(Nitro renderer)${C_RESET} ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}4)${C_RESET} ${E_GEAR} Update Renderer Only ${C_DIM}(Nitro renderer)${C_RESET} ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}5)${C_RESET} ${E_GEAR} Sync Configs Only ${C_DIM}(URL merge)${C_RESET} ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_GREEN}${C_BOLD}5)${C_RESET} ${E_GEAR} Sync Configs Only ${C_DIM}(URL merge)${C_RESET} ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}6)${C_RESET} ${E_DB} Database Manager ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_MAGENTA}${C_BOLD}6)${C_RESET} ${E_GIT} Switch Branch ${C_DIM}(main/dev/staging)${C_RESET} ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}7)${C_RESET} ${E_SHIELD} Backup / Restore ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}7)${C_RESET} ${E_DB} Database Manager ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}8)${C_RESET} ${E_WRENCH} Service Manager ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}8)${C_RESET} ${E_SHIELD} Backup / Restore ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}9)${C_RESET} ${E_CHART} System Status ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}9)${C_RESET} ${E_WRENCH} Service Manager ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}10)${C_RESET} ${E_HEART} Health Check ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}10)${C_RESET} ${E_CHART} System Status ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}11)${C_RESET} ${E_BROOM} Cache Cleanup ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}11)${C_RESET} ${E_HEART} Health Check ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}12)${C_RESET} ${E_EYE} View Logs ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}12)${C_RESET} ${E_BROOM} Cache Cleanup ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}13)${C_RESET} ${E_GEAR} Configuration ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}13)${C_RESET} ${E_EYE} View Logs ${C_CYAN}║${C_RESET}"
|
||||||
|
echo -e " ${C_CYAN}║${C_RESET} ${C_YELLOW}${C_BOLD}14)${C_RESET} ${E_GEAR} Configuration ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_RED}${C_BOLD}0)${C_RESET} Exit ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_RED}${C_BOLD}0)${C_RESET} Exit ${C_CYAN}║${C_RESET}"
|
||||||
echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}"
|
echo -e " ${C_CYAN}║${C_RESET} ${C_CYAN}║${C_RESET}"
|
||||||
@@ -1678,8 +1723,29 @@ cmd_interactive() {
|
|||||||
3) SELECTIVE_UPDATE="client"; cmd_update ;;
|
3) SELECTIVE_UPDATE="client"; cmd_update ;;
|
||||||
4) SELECTIVE_UPDATE="renderer"; cmd_update ;;
|
4) SELECTIVE_UPDATE="renderer"; cmd_update ;;
|
||||||
5) SELECTIVE_UPDATE="configs"; cmd_update ;;
|
5) SELECTIVE_UPDATE="configs"; cmd_update ;;
|
||||||
6) cmd_database ;;
|
6)
|
||||||
7)
|
echo ""
|
||||||
|
echo -e " ${C_BOLD}Current branch: ${C_CYAN}${NITRO_BRANCH:-main}${C_RESET}"
|
||||||
|
echo ""
|
||||||
|
echo -e " ${C_GREEN}1)${C_RESET} main"
|
||||||
|
echo -e " ${C_GREEN}2)${C_RESET} dev"
|
||||||
|
echo -e " ${C_GREEN}3)${C_RESET} staging"
|
||||||
|
echo -e " ${C_GREEN}4)${C_RESET} Type custom branch name"
|
||||||
|
echo ""
|
||||||
|
echo -en " Select branch [1-4]: "
|
||||||
|
local branch_choice
|
||||||
|
read -r branch_choice
|
||||||
|
case "$branch_choice" in
|
||||||
|
1) NITRO_BRANCH="main" ;;
|
||||||
|
2) NITRO_BRANCH="dev" ;;
|
||||||
|
3) NITRO_BRANCH="staging" ;;
|
||||||
|
4) echo -en " Enter branch name: "; read -r NITRO_BRANCH ;;
|
||||||
|
*) warn "Invalid selection" ;;
|
||||||
|
esac
|
||||||
|
[ -n "${NITRO_BRANCH:-}" ] && ok "Branch set to: $NITRO_BRANCH"
|
||||||
|
;;
|
||||||
|
7) cmd_database ;;
|
||||||
|
8)
|
||||||
local sub_choice
|
local sub_choice
|
||||||
sub_choice=$(select_menu "Backup & Restore" "Create Backup" "Restore Backup" "View Backups" "Return")
|
sub_choice=$(select_menu "Backup & Restore" "Create Backup" "Restore Backup" "View Backups" "Return")
|
||||||
case "$sub_choice" in
|
case "$sub_choice" in
|
||||||
@@ -1689,12 +1755,12 @@ cmd_interactive() {
|
|||||||
4|*) ;;
|
4|*) ;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
8) cmd_services ;;
|
9) cmd_services ;;
|
||||||
9) cmd_status ;;
|
10) cmd_status ;;
|
||||||
10) cmd_health ;;
|
11) cmd_health ;;
|
||||||
11) cmd_clean ;;
|
12) cmd_clean ;;
|
||||||
12) cmd_logs ;;
|
13) cmd_logs ;;
|
||||||
13) cmd_config ;;
|
14) cmd_config ;;
|
||||||
0|q|Q) echo -e "\n ${C_GREEN}Goodbye!${C_RESET}\n"; cursor_show; exit 0 ;;
|
0|q|Q) echo -e "\n ${C_GREEN}Goodbye!${C_RESET}\n"; cursor_show; exit 0 ;;
|
||||||
*) warn "Invalid selection" ;;
|
*) warn "Invalid selection" ;;
|
||||||
esac
|
esac
|
||||||
@@ -1736,7 +1802,7 @@ show_help() {
|
|||||||
echo -e " ${C_CYAN}--force, -f${C_RESET} Force update even if up to date"
|
echo -e " ${C_CYAN}--force, -f${C_RESET} Force update even if up to date"
|
||||||
echo -e " ${C_CYAN}--verbose, -v${C_RESET} Show debug output"
|
echo -e " ${C_CYAN}--verbose, -v${C_RESET} Show debug output"
|
||||||
echo -e " ${C_CYAN}--quiet, -q${C_RESET} Suppress output except errors"
|
echo -e " ${C_CYAN}--quiet, -q${C_RESET} Suppress output except errors"
|
||||||
echo -e " ${C_CYAN}--branch, -b${C_RESET} Git branch (main/dev/staging)"
|
echo -e " ${C_CYAN}--branch, -b${C_RESET} Git branch (any branch, auto-detects per repo)"
|
||||||
echo -e " ${C_CYAN}--url, -u${C_RESET} Site URL"
|
echo -e " ${C_CYAN}--url, -u${C_RESET} Site URL"
|
||||||
echo -e " ${C_CYAN}--only=${C_RESET} Selective update: emulator|client|renderer|configs"
|
echo -e " ${C_CYAN}--only=${C_RESET} Selective update: emulator|client|renderer|configs"
|
||||||
echo -e " ${C_CYAN}--version, -V${C_RESET} Show version"
|
echo -e " ${C_CYAN}--version, -V${C_RESET} Show version"
|
||||||
|
|||||||
Reference in New Issue
Block a user