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
|
||||
fi
|
||||
|
||||
# Branch
|
||||
# Branch — accept any branch name, auto-detect per repo later
|
||||
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}"
|
||||
case "$NITRO_BRANCH" in
|
||||
main|dev|master|staging) ;;
|
||||
*) die "Invalid branch '$NITRO_BRANCH'. Use main, dev, master, or staging." ;;
|
||||
esac
|
||||
export NITRO_BRANCH
|
||||
fi
|
||||
}
|
||||
@@ -1619,22 +1615,69 @@ clean_node_modules() {
|
||||
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() {
|
||||
local repo="$1" branch="$2"
|
||||
cd "$repo"
|
||||
cd "$repo" || { warn "Cannot access $repo"; return 1; }
|
||||
|
||||
git stash --include-untracked 2>/dev/null || true
|
||||
local old_head
|
||||
old_head=$(git rev-parse HEAD 2>/dev/null || echo "")
|
||||
if ! git checkout "$branch" 2>/dev/null; then
|
||||
local alt="${branch^}"
|
||||
if [ "$alt" != "$branch" ] && git checkout "$alt" 2>/dev/null; then
|
||||
info "Branch '$branch' not found, using '$alt' instead"
|
||||
branch="$alt"
|
||||
else
|
||||
die "Branch '$branch' (or '$alt') not found in $repo"
|
||||
fi
|
||||
|
||||
# Detect best available branch
|
||||
local resolved_branch
|
||||
resolved_branch=$(detect_branch "$repo" "$branch")
|
||||
|
||||
if [ "$resolved_branch" != "$branch" ]; then
|
||||
info "Branch '$branch' not available in $(basename "$repo"), using '$resolved_branch' instead"
|
||||
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" ]
|
||||
}
|
||||
|
||||
@@ -1648,6 +1691,7 @@ cmd_interactive() {
|
||||
echo -e " ${C_BOLD}${C_CYAN}╔══════════════════════════════════════════════════════════════╗${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} ${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_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}"
|
||||
@@ -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}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_YELLOW}${C_BOLD}6)${C_RESET} ${E_DB} Database Manager ${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}8)${C_RESET} ${E_WRENCH} Service Manager ${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}10)${C_RESET} ${E_HEART} Health Check ${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}12)${C_RESET} ${E_EYE} View Logs ${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_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_DB} Database 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_WRENCH} Service Manager ${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_HEART} Health Check ${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_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_RED}${C_BOLD}0)${C_RESET} Exit ${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 ;;
|
||||
4) SELECTIVE_UPDATE="renderer"; cmd_update ;;
|
||||
5) SELECTIVE_UPDATE="configs"; cmd_update ;;
|
||||
6) cmd_database ;;
|
||||
7)
|
||||
6)
|
||||
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
|
||||
sub_choice=$(select_menu "Backup & Restore" "Create Backup" "Restore Backup" "View Backups" "Return")
|
||||
case "$sub_choice" in
|
||||
@@ -1689,12 +1755,12 @@ cmd_interactive() {
|
||||
4|*) ;;
|
||||
esac
|
||||
;;
|
||||
8) cmd_services ;;
|
||||
9) cmd_status ;;
|
||||
10) cmd_health ;;
|
||||
11) cmd_clean ;;
|
||||
12) cmd_logs ;;
|
||||
13) cmd_config ;;
|
||||
9) cmd_services ;;
|
||||
10) cmd_status ;;
|
||||
11) cmd_health ;;
|
||||
12) cmd_clean ;;
|
||||
13) cmd_logs ;;
|
||||
14) cmd_config ;;
|
||||
0|q|Q) echo -e "\n ${C_GREEN}Goodbye!${C_RESET}\n"; cursor_show; exit 0 ;;
|
||||
*) warn "Invalid selection" ;;
|
||||
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}--verbose, -v${C_RESET} Show debug output"
|
||||
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}--only=${C_RESET} Selective update: emulator|client|renderer|configs"
|
||||
echo -e " ${C_CYAN}--version, -V${C_RESET} Show version"
|
||||
|
||||
Reference in New Issue
Block a user