update
This commit is contained in:
@@ -156,6 +156,77 @@ UPDATE_REPOSITORY() {
|
||||
esac
|
||||
}
|
||||
|
||||
SWITCH_TAPM_BRANCH() {
|
||||
local target_branch="$1"
|
||||
local repository='/opt/idssys/ta-proxmenu'
|
||||
local current_branch
|
||||
local target_state=''
|
||||
|
||||
if ! git check-ref-format --branch "$target_branch" >/dev/null 2>&1; then
|
||||
echo -e "${idsCL[Red]}'${target_branch}' is not a valid Git branch name.${idsCL[Default]}"
|
||||
return 1
|
||||
fi
|
||||
if [[ ! -d "${repository}/.git" ]]; then
|
||||
echo -e "${idsCL[Red]}TA-ProxMenu is not a Git repository.${idsCL[Default]}"
|
||||
return 1
|
||||
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 [[ "$target_branch" == "$current_branch" ]]; then
|
||||
echo -e "${idsCL[Green]}TA-ProxMenu is already using '${target_branch}'.${idsCL[Default]}"
|
||||
return 0
|
||||
fi
|
||||
if TAPM_GIT_WORKTREE_DIRTY "$repository"; then
|
||||
echo -e "${idsCL[LightYellow]}TA-ProxMenu has local changes; branch switching was refused to preserve them.${idsCL[Default]}"
|
||||
git -C "$repository" status --short
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo -e "${idsCL[LightCyan]}Fetching TA-ProxMenu branch '${target_branch}'...${idsCL[Default]}"
|
||||
if ! TAPM_GIT_FETCH_BRANCH "$repository" "$target_branch" 30 >/dev/null 2>&1; then
|
||||
echo -e "${idsCL[Red]}Could not fetch branch '${target_branch}' from origin.${idsCL[Default]}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if git -C "$repository" show-ref --verify --quiet "refs/heads/${target_branch}"; then
|
||||
target_state="$(
|
||||
TAPM_GIT_RELATION "$repository" "refs/heads/${target_branch}" \
|
||||
"refs/remotes/origin/${target_branch}"
|
||||
)" || {
|
||||
echo -e "${idsCL[Red]}Could not compare local and remote '${target_branch}'.${idsCL[Default]}"
|
||||
return 1
|
||||
}
|
||||
case "$target_state" in
|
||||
ahead)
|
||||
echo -e "${idsCL[LightYellow]}Local branch '${target_branch}' has commits not on origin; switching was refused.${idsCL[Default]}"
|
||||
return 1
|
||||
;;
|
||||
diverged)
|
||||
echo -e "${idsCL[LightYellow]}Local branch '${target_branch}' has diverged from origin; switching was refused.${idsCL[Default]}"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
|
||||
git -C "$repository" switch "$target_branch" >/dev/null || return 1
|
||||
else
|
||||
git -C "$repository" switch --create "$target_branch" \
|
||||
--track "origin/${target_branch}" >/dev/null || return 1
|
||||
fi
|
||||
|
||||
if [[ "$target_state" == "behind" ]] &&
|
||||
! TAPM_GIT_FAST_FORWARD "$repository" "$target_branch" >/dev/null; then
|
||||
echo -e "${idsCL[Red]}Could not fast-forward '${target_branch}'; no commits were discarded.${idsCL[Default]}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
rm -f /var/cache/ta-proxmenu/update-status 2>/dev/null || true
|
||||
echo -e "${idsCL[Green]}TA-ProxMenu is now using branch '${target_branch}'.${idsCL[Default]}"
|
||||
}
|
||||
|
||||
INSTALL_UPDATES() {
|
||||
local current_branch
|
||||
local defaults_warning=0
|
||||
@@ -199,6 +270,10 @@ case "${1:-}" in
|
||||
INSTALL_UPDATES
|
||||
exit $?
|
||||
;;
|
||||
main|V[0-9]*)
|
||||
SWITCH_TAPM_BRANCH "$1"
|
||||
exit $?
|
||||
;;
|
||||
tapm)
|
||||
exit 0
|
||||
;;
|
||||
|
||||
Reference in New Issue
Block a user