tj.git-extras/bin/git-repl
wyattscarpenter 5ca9360109
Some checks failed
ci / lint (push) Has been cancelled
ci / typo (push) Has been cancelled
ci / test (push) Has been cancelled
ci / build (macos-latest) (push) Has been cancelled
ci / build (ubuntu-latest) (push) Has been cancelled
Enhance git-repl (#1160)
2024-09-22 20:22:58 -07:00

57 lines
1.2 KiB
Bash
Executable file

#!/usr/bin/env bash
git version
echo "git-extras version ""$(git-extras -v)"
echo "Type 'ls' to ls files below current directory; '!command' to execute any command or just 'subcommand' to execute any git subcommand; 'quit', 'exit', 'q', ^D, or ^C to exit the git repl."
while true; do
# Current branch
cur=$(git symbolic-ref HEAD 2> /dev/null | cut -d/ -f3-)
# Prompt
if test -n "$cur"; then
cur_string=" ($cur)"
else
cur_string=""
fi
if test -n "$exit_status" && test "$exit_status" -ne 0; then
es_string=$' \e[31m['"$exit_status"$']\e[0m'
else
es_string=""
fi
prompt="git$cur_string$es_string> "
# Use arguments as a command if any are provided.
if [ $# -ne 0 ]; then
cmd=$*
set --
echo "$prompt" "$cmd" # It is as though you had entered a command.
else
# Readline
read -e -r -p "$prompt" cmd
# Check for EOF, and end the program if so (handles ^D).
test $? -ne 0 && break
fi
# History
history -s "$cmd"
# Built-in commands
case $cmd in
ls) cmd=ls-files;;
"") continue;;
quit|exit|q) break;;
esac
if [[ $cmd == !* ]]; then
eval ${cmd:1}
elif [[ $cmd == git* ]]; then
eval $cmd
else
eval git "$cmd"
fi
exit_status=$?
done
echo