From feedffe75241bad1cf1cce5a4208ab3f682e1b99 Mon Sep 17 00:00:00 2001 From: Dirk Alders Date: Sat, 30 Sep 2023 09:17:25 +0200 Subject: [PATCH] giti rework for detailed prompt output --- giti | 182 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 94 insertions(+), 88 deletions(-) diff --git a/giti b/giti index 33067cc..17c600b 100755 --- a/giti +++ b/giti @@ -1,11 +1,13 @@ #!/bin/bash # - usage="Usage: $0 [-n | no details] [-r | repeat]" -while getopts "hnrs" options; do + +# +# command line arguments +# +usage="Usage: $0 [-p | output for prompt]" +while getopts "hp" options; do case $options in - n ) NO_DETAILS="True";; - r ) REPEAT="True";; - s ) SHORT="True";; + p ) PROMPT="True";; h ) echo $usage exit 0 ;; @@ -15,89 +17,93 @@ while getopts "hnrs" options; do esac done -if [[ $REPEAT == "True" ]]; then - watch -n 1 -c "clear && $0 -s" -else - COLOR_WHITE="\033[00m" - COLOR_CYAN="\033[1;36m" - COLOR_RED="\033[1;31m" - COLOR_YELLOW="\033[1;33m" - COLOR_DARKYELLOW="\033[0;33m" - COLOR_GREEN="\033[1;32m" - COLOR_DARKGREEN="\033[0;32m" - COLOR_OCHRE="\033[38;5;95m" - # - git_status="$(LANGUAGE='en_US.UTF-8 git' git status 2> /dev/null)" - git_diff="$(git status --porcelain 2> /dev/null)" - # - if [ -z "$git_status" ]; then - # No GIT repository - exit - fi - if [[ $SHORT ]]; then - if [[ ! $git_status =~ "working tree clean" ]] && [[ ! $git_status =~ "working directory clean" ]]; then - git_status_color="$COLOR_RED" - git_status_text="local changes" - elif [[ $git_status =~ "Your branch is behind" ]]; then - git_status_color="$COLOR_YELLOW" - git_status_text="pull required" - elif [[ $git_status =~ "Your branch is ahead of" ]]; then - git_status_color="$COLOR_YELLOW" - git_status_text="push required" - elif [[ $git_status =~ "nothing to commit" ]]; then - git_status_color="$COLOR_DARKGREEN" - git_status_text="clean " - else - git_status_color="$COLOR_OCHRE" - git_status_text="unknown " - fi - echo -ne "$git_status_color$git_status_text$COLOR_WHITE" - else - if [[ ! $git_status = "" ]]; then - git_branch="$(git branch 2> /dev/null | sed --quiet 's/* \(.*\)/\1/p')" - git_url="$(git config --get remote.origin.url 2> /dev/null)" - if [[ ! $git_status =~ "working tree clean" ]] && [[ ! $git_status =~ "working directory clean" ]]; then - git_status_color="$COLOR_RED" - git_status_text="local changes" - elif [[ $git_status =~ "Your branch is behind" ]]; then - git_status_color="$COLOR_YELLOW" - git_status_text="pull required" - elif [[ $git_status =~ "Your branch is ahead of" ]]; then - git_status_color="$COLOR_YELLOW" - git_status_text="push required" - elif [[ $git_status =~ "nothing to commit" ]]; then - git_status_color="$COLOR_DARKGREEN" - git_status_text="clean " - else - git_status_color="$COLOR_OCHRE" - git_status_text="unknown " - fi - fi - if [[ $NO_DETAILS ]]; then - # echo -e "$git_status_color╠══$COLOR_GREEN($git_branch)$git_status_color - $git_status_text - $COLOR_CYAN$git_url$COLOR_WHITE\n\b" - echo -e "$git_status_color├──$COLOR_GREEN($git_branch)$git_status_color - $git_status_text - $COLOR_CYAN$git_url$COLOR_WHITE\n\b" - else - # echo -e "$git_status_color╔═══╡ $git_status_text ╞════════════════════════════════════════════════════════════════" - echo -e "$git_status_color┌───┤ $git_status_text ├────────────────────────────────────────────────────────────────" - # echo -e "$git_status_color║ $COLOR_GREEN($git_branch) $COLOR_CYAN$git_url" - echo -e "$git_status_color│ $COLOR_GREEN($git_branch) $COLOR_CYAN$git_url" +# +# color definitions +# +COLOR_WHITE="\033[00m" +COLOR_CYAN="\033[1;36m" +COLOR_RED="\033[1;31m" +COLOR_YELLOW="\033[1;33m" +COLOR_DARKYELLOW="\033[0;33m" +COLOR_GREEN="\033[1;32m" +COLOR_DARKGREEN="\033[0;32m" +COLOR_OCHRE="\033[38;5;95m" - if [[ ! $git_diff == "" ]]; then - # echo -e "$git_status_color╠════════════════════════════════════════════════════════════════════════════════════" - echo -e "$git_status_color├────────────────────────────────────────────────────────────────────────────────────" - IFS=$'\n' - for ENTRY in $git_diff; do - if [[ $ENTRY = "D "* ]] || [[ $ENTRY = "A "* ]] || [[ $ENTRY = "M "* ]] || [[ $ENTRY = "R "* ]]; then - # echo -e "$git_status_color║ $COLOR_DARKYELLOW$ENTRY" - echo -e "$git_status_color│ $COLOR_DARKYELLOW$ENTRY" - else - # echo -e "$git_status_color║ $COLOR_YELLOW$ENTRY" - echo -e "$git_status_color│ $COLOR_YELLOW$ENTRY" - fi - done - fi - # echo -e "$git_status_color╚════════════════════════════════════════════════════════════════════════════════════$COLOR_WHITE\n \b" - echo -e "$git_status_color└────────────────────────────────────────────────────────────────────────────────────$COLOR_WHITE\n \b" - fi +# +# git information storage +# +git_status="$(LANGUAGE='en_US.UTF-8 git' git status 2> /dev/null)" +git_diff="$(git status --porcelain 2> /dev/null)" + + +# +# decision for git output (path is repository) +# +if [ -z "$git_status" ]; then + # No GIT repository + exit +fi + +# +# git preparations +# +git_branch="$(git branch 2> /dev/null | sed --quiet 's/* \(.*\)/\1/p')" +git_url="$(git config --get remote.origin.url 2> /dev/null)" +if [[ ! $git_status =~ "working tree clean" ]] && [[ ! $git_status =~ "working directory clean" ]]; then + git_status_color="$COLOR_RED" + git_status_text="local changes" +elif [[ $git_status =~ "Your branch is behind" ]]; then + git_status_color="$COLOR_YELLOW" + git_status_text="pull required" +elif [[ $git_status =~ "Your branch is ahead of" ]]; then + git_status_color="$COLOR_YELLOW" + git_status_text="push required" +elif [[ $git_status =~ "nothing to commit" ]]; then + git_status_color="$COLOR_DARKGREEN" + git_status_text="clean " +else + git_status_color="$COLOR_OCHRE" + git_status_text="unknown " +fi + + +# +# Start of console output +# + +## STATUS AND INFO ###### +if [[ $PROMPT ]]; then + # print status + echo -e "$git_status_color├──$COLOR_GREEN($git_branch)$git_status_color - $git_status_text - $COLOR_CYAN$git_url$COLOR_WHITE" +else + # print status and + echo -e "$git_status_color┌───┤ $git_status_text ├────────────────────────────────────────────────────────────────" + echo -e "$git_status_color│ $COLOR_GREEN($git_branch) $COLOR_CYAN$git_url" + + if [[ ! $git_diff == "" ]]; then + echo -e "$git_status_color├────────────────────────────────────────────────────────────────────────────────────" + else + echo -e "$git_status_color└────────────────────────────────────────────────────────────────────────────────────$COLOR_WHITE\n \b" fi fi + +## FILE INFO ############ +if [[ ! $git_diff == "" ]]; then + if [[ ! $PROMPT || "$GIT_PROMPT_DETAILS" == "on" ]]; then + IFS=$'\n' + for ENTRY in $git_diff; do + if [[ $ENTRY = "D "* ]] || [[ $ENTRY = "A "* ]] || [[ $ENTRY = "M "* ]] || [[ $ENTRY = "R "* ]]; then + echo -e "$git_status_color│ $COLOR_DARKYELLOW$ENTRY" + else + echo -e "$git_status_color│ $COLOR_YELLOW$ENTRY" + fi + done + fi +fi + +## CLOSING ############## +if [[ $PROMPT ]]; then + echo -e " \b" +else + echo -e "$git_status_color└────────────────────────────────────────────────────────────────────────────────────$COLOR_WHITE\n \b" +fi