# shgit # 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() { : ${SHGIT_BEGIN:=} ${SHGIT_END:= } ${SHGIT_SEP:=:} args=$(git rev-parse --git-dir --is-inside-work-tree 2>/dev/null) || return set -- $args gitdir=${1:-} worktree=${2:-} if ! name=$(git symbolic-ref -q --short HEAD); then name=$(git rev-parse --short HEAD 2>/dev/null) name=${name:-?} fi rb= rbdir=$gitdir/rebase-merge if [ -d "$rbdir" ]; then rb=${SHGIT_SEP}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 [ "$worktree" = "true" ]; then if [ -n "$(git status --porcelain)" ]; then status=${SHGIT_SEP}* fi else status=${SHGIT_SEP}? fi oldIFS=$IFS IFS=" " set -- $(git rev-list --left-right --count @{upstream}...HEAD \ 2>/dev/null) IFS=$oldIFS commits=v${1:-0}^${2:-0} commits=${commits#v0} commits=${commits%^0} commits=${commits:+$SHGIT_SEP$commits} printf "%s%s%s" "$SHGIT_BEGIN" "$name$rb$status$commits" "$SHGIT_END" }