mirror of
https://github.com/tj/git-extras.git
synced 2026-09-10 07:26:17 -04:00
59 lines
1.3 KiB
Bash
Executable file
59 lines
1.3 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
|
|
# shellcheck disable=SC2086
|
|
eval ${cmd:1}
|
|
elif [[ $cmd == git* ]]; then
|
|
# shellcheck disable=SC2086
|
|
eval $cmd
|
|
else
|
|
eval git "$cmd"
|
|
fi
|
|
exit_status=$?
|
|
done
|
|
|
|
echo
|