#!/usr/bin/env bash set -euo pipefail # git rev-parse emits an error if not in a git repo so only need to bail out gitdir="$(git rev-parse --git-dir)" || exit discover_op() { local op for op in cherry_pick merge rebase revert ; do if [ -f "${gitdir}/${op^^}_HEAD" ]; then echo "${op/_/-}" fi done } validate_op() { local op="$1" if [ -z "$op" ]; then echo "No active operation found" >&2 exit 1 fi if [[ "$(echo "$op" | wc -l)" -gt 1 ]]; then echo "Multiple active operations found:" >&2 for o in $op; do echo " - $o: HEAD: $(cat "${gitdir}/${o}_HEAD")" >&2 done exit 1 fi } discover_action() { local action=${1/git-/} if [ "$action" != "abort" ] && [ "$action" != "continue" ]; then echo "Invalid action: $1" >&2 exit 1 fi echo "$action" } action=$(discover_action "$(basename "$0")") op=$(discover_op) validate_op "$op" git "$op" "--$action"