diff --git a/run.sh b/run.sh index 1482477..0910f91 100755 --- a/run.sh +++ b/run.sh @@ -8,7 +8,9 @@ source /opt/idssys/ta-proxmenu/defaults.inc SWITCH_TO_V2() { local repository='/opt/idssys/ta-proxmenu' local current_branch + local head_commit local local_commit + local main_commit local remote_commit if [[ ! -d "${repository}/.git" ]]; then @@ -17,10 +19,6 @@ SWITCH_TO_V2() { fi current_branch="$(git -C "$repository" branch --show-current 2>/dev/null)" - if [[ -z "$current_branch" ]]; then - echo -e "${idsCL[Red]}TA-ProxMenu is in a detached HEAD state; branch switching was refused.${idsCL[Default]}" - return 1 - fi if [[ "$current_branch" == "V2" ]]; then exec /opt/idssys/ta-proxmenu/run.sh fi @@ -32,11 +30,23 @@ SWITCH_TO_V2() { echo -e "${idsCL[LightCyan]}Fetching TA-ProxMenu branch 'V2'...${idsCL[Default]}" if ! timeout 30 git -C "$repository" fetch --prune origin \ + '+refs/heads/main:refs/remotes/origin/main' \ '+refs/heads/V2:refs/remotes/origin/V2' >/dev/null 2>&1; then echo -e "${idsCL[Red]}Could not fetch branch 'V2' from origin.${idsCL[Default]}" return 1 fi + if [[ -z "$current_branch" ]]; then + head_commit="$(git -C "$repository" rev-parse --verify 'HEAD^{commit}' 2>/dev/null)" + main_commit="$(git -C "$repository" rev-parse --verify \ + 'refs/remotes/origin/main^{commit}' 2>/dev/null)" + if [[ -z "$head_commit" || "$head_commit" != "$main_commit" ]]; then + echo -e "${idsCL[Red]}TA-ProxMenu has an unrecognized detached HEAD; branch switching was refused.${idsCL[Default]}" + return 1 + fi + echo -e "${idsCL[LightCyan]}Recovered the legacy updater's detached main checkout.${idsCL[Default]}" + fi + remote_commit="$(git -C "$repository" rev-parse --verify \ 'refs/remotes/origin/V2^{commit}' 2>/dev/null)" || { echo -e "${idsCL[Red]}Origin does not provide a usable V2 branch.${idsCL[Default]}"