diff options
-rw-r--r-- | shellrc.d/git | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/shellrc.d/git b/shellrc.d/git index 2dac8bb..1c1de0a 100644 --- a/shellrc.d/git +++ b/shellrc.d/git @@ -1,5 +1,12 @@ # vim: ft=sh: +# Get path to worktree for git branch +_gitbworktree() { + git worktree list --porcelain | \ + awk -v ref="refs/heads/$1" \ + '/^worktree / { worktree = $2 }; /^branch / { if ($2 == ref) { print worktree }}' +} + # Automatic branch merger (merge branch, push it to server and remove branch) # Expects name of the branch as argument # It fails if it's not fast forward merge and if there is fixup! commit. @@ -9,9 +16,10 @@ gitbmerge() ( echo "First squash fixups!" exit 1 fi - local WT="$(git worktree list | sed -nE "/\[$1\]/{s/([^ ]+) .*/\1/p}")" - if [ -n "$WT" ]; then - rm -r "$WT" + local wt + wt="$(_gitbworktree "$1")" + if [ -n "$wt" ]; then + rm -r "$wt" git worktree prune fi git merge --ff-only "$1" && git push && git branch -d "$1" && git push origin :"$1" |