git:checkout-worktree: Set err_return + no_unset
If anything happens abnormally, return early and leave it to the user to fix things.
This commit is contained in:
@@ -11,29 +11,38 @@
|
|||||||
# TODO: If any conflicts arise, all further shells should be interactive instead
|
# TODO: If any conflicts arise, all further shells should be interactive instead
|
||||||
# of looping forever.
|
# of looping forever.
|
||||||
|
|
||||||
|
emulate -L zsh -o err_return -o no_unset
|
||||||
|
|
||||||
local REPO_NAME WORKTREE_PATH
|
local REPO_NAME WORKTREE_PATH
|
||||||
REPO_NAME="${$(git rev-parse --show-toplevel):t}" || return
|
REPO_NAME="${$(git rev-parse --show-toplevel):t}"
|
||||||
WORKTREE_PATH="$(mktemp -d -p "" "worktree.XXX.$REPO_NAME.$1")"
|
WORKTREE_PATH="$(mktemp -d -p "" "worktree.XXX.$REPO_NAME.$1")"
|
||||||
|
|
||||||
|
trap '
|
||||||
|
errc=$?
|
||||||
|
<&2 printf "Exiting abnormally. Check and possibly remove '$WORKTREE_PATH' manually.\n"
|
||||||
|
return $errc
|
||||||
|
' INT QUIT TERM EXIT
|
||||||
|
|
||||||
git worktree add "$WORKTREE_PATH" "$1"
|
git worktree add "$WORKTREE_PATH" "$1"
|
||||||
[[ -e "$WORKTREE_PATH" ]] || return 1
|
|
||||||
pushd -q "$WORKTREE_PATH"
|
pushd -q "$WORKTREE_PATH"
|
||||||
|
|
||||||
# Start subshell
|
# Start subshell
|
||||||
"$SHELL"
|
"$SHELL" && errc=$? || errc=$?
|
||||||
errc=$?
|
|
||||||
|
|
||||||
# Cleanup when exiting
|
# Cleanup when exiting
|
||||||
popd -q
|
popd -q || true
|
||||||
|
|
||||||
# Restart the subshell until every issue is resolved and the worktree is
|
# Restart the subshell until every issue is resolved and the worktree is
|
||||||
# removed
|
# removed
|
||||||
until [[ ! -e "$WORKTREE_PATH" ]] || git worktree remove "$WORKTREE_PATH"; do
|
until [[ ! -e "$WORKTREE_PATH" ]] || git worktree remove "$WORKTREE_PATH"; do
|
||||||
pushd -q "$WORKTREE_PATH"
|
pushd -q "$WORKTREE_PATH"
|
||||||
"$SHELL"
|
"$SHELL" && errc=$? || errc=$?
|
||||||
errc=$?
|
popd -q || true
|
||||||
popd -q
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Reset traps
|
||||||
|
trap '-' INT QUIT TERM EXIT
|
||||||
|
|
||||||
git worktree prune
|
git worktree prune
|
||||||
return $errc
|
return $errc
|
||||||
|
|||||||
Reference in New Issue
Block a user