#!/bin/sh
set -eu

usage() {
	cat <<-'EOF'
		Usage:
		  git cleanup [REMOTE]
		  git cleanup -h
	EOF
}

help() {
	cat <<-'EOF'

		Options:
		  -h, --help    show this message

		  REMOTE        the remote to prune the remote tracking
		                branches from (default: origin)


		Delete merged branches, both local and remote-tracking.


		Examples:

		  Cleanup branches from "origin":

		    $ git cleanup


		  Delete branches from "upstream":

		    $ git cleanup upstream
	EOF
}

for flag in "$@"; do
	case "$flag" in
		--)
			break
			;;
		--help)
			usage
			help
			exit
			;;
		*)
			;;
	esac
done

while getopts 'h' flag; do
	case "$flag" in
		h)
			usage
			help
			exit
			;;
		*)
			usage >&2
			exit 2
			;;
	esac
done
shift $((OPTIND - 1))

REMOTE="${1:-origin}"

git branch --merged |
	grep -v -e '^\*' -e '^. main$' |
	xargs git branch -d

git remote prune "$REMOTE"