# env
# Written in 2019 by Lucas
# CC0 1.0 Universal/Public domain - No rights reserved
#
# To the extent possible under law, the author(s) have dedicated all
# copyright and related and neighboring rights to this software to the
# public domain worldwide. This software is distributed without any
# warranty. You should have received a copy of the CC0 Public Domain
# Dedication along with this software. If not, see
# <http://creativecommons.org/publicdomain/zero/1.0/>.

shgit() {
	if ! gitdir=$(git rev-parse --git-dir 2>/dev/null) \
	    || [ -z "$gitdir" ]; then
		return
	fi

	symbolic=$(git symbolic-ref --short HEAD 2>/dev/null)
	hash=$(git rev-parse --short HEAD 2>/dev/null)
	name=${symbolic:-${hash:-"?"}}

	rb=
	rbdir="$gitdir/rebase-merge"
	if [ -d "$rbdir" ]; then
		rb="REBASE"
		read -r name <"$rbdir/head-name"
		name=${name##*/}
		[ -f "$rbdir/interactive" ] && rb="$rb-i"
		rbcount=$(wc -l <"$rbdir/done")
		read -r rbtotal <"$rbdir/end"
		rb="$rb ${rbcount##* }/$rbtotal"
	fi

	status=
	if [ -z "$(git status --porcelain)" ]; then
		status="*"
	fi

	commits=$(git rev-list --left-right --count @{upstream}...HEAD \
	    2>/dev/null | {
		t=
		IFS="	" read -r behind ahead
		[ ${behind:-0} -gt 0 ] && t=$t"v$behind"
		[ ${ahead:-0} -gt 0 ] && t=$t"^$ahead"
		printf "%s" "$t"
	})

	printf "%s" "$name${rb:+:$rb}${status:+:$status}${commits:+:$commits}"
}