env/utils/shgit

48 lines
1.3 KiB
Plaintext
Raw Normal View History

2019-12-09 12:03:41 +01:00
# shgit
2019-09-11 04:11:40 +02:00
# 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/>.
2019-12-09 12:03:41 +01:00
shgit()
{
: ${SHGIT_BEGIN:=} ${SHGIT_END:= } ${SHGIT_SEP:=:}
gitdir=$(git rev-parse --git-dir 2>/dev/null) && [ -n "$gitdir" ] ||
return
2019-09-11 04:11:40 +02:00
if ! name=$(git symbolic-ref -q --short HEAD); then
2019-12-10 12:30:20 +01:00
name=$(git rev-parse --short HEAD 2>/dev/null)
name=${hash:-?}
2019-12-09 12:03:41 +01:00
fi
2019-09-11 04:11:40 +02:00
rb=
2019-12-10 12:30:20 +01:00
rbdir=$gitdir/rebase-merge
2019-09-11 04:11:40 +02:00
if [ -d "$rbdir" ]; then
2019-12-10 12:30:20 +01:00
rb=${SHGIT_SEP}REBASE
2019-09-11 04:11:40 +02:00
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=
2019-12-10 12:30:20 +01:00
[ -n "$(git status --porcelain)" ] && status=${SHGIT_SEP}*
2019-09-11 04:11:40 +02:00
IFS=" " set -- $(git rev-list --left-right --count \
@{upstream}...HEAD 2>/dev/null)
commits=v${1:-0}^${2:-0}
commits=${commits#v0}
commits=${commits%^0}
commits=${commits:+$SHGIT_SEP$commits}
2019-09-11 04:11:40 +02:00
2019-12-09 12:03:41 +01:00
printf "%s%s%s" "$SHGIT_BEGIN" "$name$rb$status$commits" "$SHGIT_END"
2019-09-11 04:11:40 +02:00
}