summaryrefslogtreecommitdiff
path: root/dot-oh-my-zsh/custom/themes/spaceship-prompt/sections/git_status.zsh
diff options
context:
space:
mode:
Diffstat (limited to 'dot-oh-my-zsh/custom/themes/spaceship-prompt/sections/git_status.zsh')
-rw-r--r--dot-oh-my-zsh/custom/themes/spaceship-prompt/sections/git_status.zsh115
1 files changed, 115 insertions, 0 deletions
diff --git a/dot-oh-my-zsh/custom/themes/spaceship-prompt/sections/git_status.zsh b/dot-oh-my-zsh/custom/themes/spaceship-prompt/sections/git_status.zsh
new file mode 100644
index 00000000..ff346337
--- /dev/null
+++ b/dot-oh-my-zsh/custom/themes/spaceship-prompt/sections/git_status.zsh
@@ -0,0 +1,115 @@
+#
+# Git status
+#
+
+# ------------------------------------------------------------------------------
+# Configuration
+# ------------------------------------------------------------------------------
+
+SPACESHIP_GIT_STATUS_SHOW="${SPACESHIP_GIT_STATUS_SHOW=true}"
+SPACESHIP_GIT_STATUS_PREFIX="${SPACESHIP_GIT_STATUS_PREFIX=" ["}"
+SPACESHIP_GIT_STATUS_SUFFIX="${SPACESHIP_GIT_STATUS_SUFFIX="]"}"
+SPACESHIP_GIT_STATUS_COLOR="${SPACESHIP_GIT_STATUS_COLOR="red"}"
+SPACESHIP_GIT_STATUS_UNTRACKED="${SPACESHIP_GIT_STATUS_UNTRACKED="?"}"
+SPACESHIP_GIT_STATUS_ADDED="${SPACESHIP_GIT_STATUS_ADDED="+"}"
+SPACESHIP_GIT_STATUS_MODIFIED="${SPACESHIP_GIT_STATUS_MODIFIED="!"}"
+SPACESHIP_GIT_STATUS_RENAMED="${SPACESHIP_GIT_STATUS_RENAMED="»"}"
+SPACESHIP_GIT_STATUS_DELETED="${SPACESHIP_GIT_STATUS_DELETED="✘"}"
+SPACESHIP_GIT_STATUS_STASHED="${SPACESHIP_GIT_STATUS_STASHED="$"}"
+SPACESHIP_GIT_STATUS_UNMERGED="${SPACESHIP_GIT_STATUS_UNMERGED="="}"
+SPACESHIP_GIT_STATUS_AHEAD="${SPACESHIP_GIT_STATUS_AHEAD="⇡"}"
+SPACESHIP_GIT_STATUS_BEHIND="${SPACESHIP_GIT_STATUS_BEHIND="⇣"}"
+SPACESHIP_GIT_STATUS_DIVERGED="${SPACESHIP_GIT_STATUS_DIVERGED="⇕"}"
+
+# ------------------------------------------------------------------------------
+# Section
+# ------------------------------------------------------------------------------
+
+# We used to depend on OMZ git library,
+# But it doesn't handle many of the status indicator combinations.
+# Also, It's hard to maintain external dependency.
+# See PR #147 at https://git.io/vQkkB
+# See git help status to know more about status formats
+spaceship_git_status() {
+ [[ $SPACESHIP_GIT_STATUS_SHOW == false ]] && return
+
+ spaceship::is_git || return
+
+ local INDEX git_status=""
+
+ INDEX=$(command git status --porcelain -b 2> /dev/null)
+
+ # Check for untracked files
+ if $(echo "$INDEX" | command grep -E '^\?\? ' &> /dev/null); then
+ git_status="$SPACESHIP_GIT_STATUS_UNTRACKED$git_status"
+ fi
+
+ # Check for staged files
+ if $(echo "$INDEX" | command grep '^A[ MDAU] ' &> /dev/null); then
+ git_status="$SPACESHIP_GIT_STATUS_ADDED$git_status"
+ elif $(echo "$INDEX" | command grep '^M[ MD] ' &> /dev/null); then
+ git_status="$SPACESHIP_GIT_STATUS_ADDED$git_status"
+ elif $(echo "$INDEX" | command grep '^UA' &> /dev/null); then
+ git_status="$SPACESHIP_GIT_STATUS_ADDED$git_status"
+ fi
+
+ # Check for modified files
+ if $(echo "$INDEX" | command grep '^[ MARC]M ' &> /dev/null); then
+ git_status="$SPACESHIP_GIT_STATUS_MODIFIED$git_status"
+ fi
+
+ # Check for renamed files
+ if $(echo "$INDEX" | command grep '^R[ MD] ' &> /dev/null); then
+ git_status="$SPACESHIP_GIT_STATUS_RENAMED$git_status"
+ fi
+
+ # Check for deleted files
+ if $(echo "$INDEX" | command grep '^[MARCDU ]D ' &> /dev/null); then
+ git_status="$SPACESHIP_GIT_STATUS_DELETED$git_status"
+ elif $(echo "$INDEX" | command grep '^D[ UM] ' &> /dev/null); then
+ git_status="$SPACESHIP_GIT_STATUS_DELETED$git_status"
+ fi
+
+ # Check for stashes
+ if $(command git rev-parse --verify refs/stash >/dev/null 2>&1); then
+ git_status="$SPACESHIP_GIT_STATUS_STASHED$git_status"
+ fi
+
+ # Check for unmerged files
+ if $(echo "$INDEX" | command grep '^U[UDA] ' &> /dev/null); then
+ git_status="$SPACESHIP_GIT_STATUS_UNMERGED$git_status"
+ elif $(echo "$INDEX" | command grep '^AA ' &> /dev/null); then
+ git_status="$SPACESHIP_GIT_STATUS_UNMERGED$git_status"
+ elif $(echo "$INDEX" | command grep '^DD ' &> /dev/null); then
+ git_status="$SPACESHIP_GIT_STATUS_UNMERGED$git_status"
+ elif $(echo "$INDEX" | command grep '^[DA]U ' &> /dev/null); then
+ git_status="$SPACESHIP_GIT_STATUS_UNMERGED$git_status"
+ fi
+
+ # Check whether branch is ahead
+ local is_ahead=false
+ if $(echo "$INDEX" | command grep '^## [^ ]\+ .*ahead' &> /dev/null); then
+ is_ahead=true
+ fi
+
+ # Check whether branch is behind
+ local is_behind=false
+ if $(echo "$INDEX" | command grep '^## [^ ]\+ .*behind' &> /dev/null); then
+ is_behind=true
+ fi
+
+ # Check wheather branch has diverged
+ if [[ "$is_ahead" == true && "$is_behind" == true ]]; then
+ git_status="$SPACESHIP_GIT_STATUS_DIVERGED$git_status"
+ else
+ [[ "$is_ahead" == true ]] && git_status="$SPACESHIP_GIT_STATUS_AHEAD$git_status"
+ [[ "$is_behind" == true ]] && git_status="$SPACESHIP_GIT_STATUS_BEHIND$git_status"
+ fi
+
+ if [[ -n $git_status ]]; then
+ # Status prefixes are colorized
+ spaceship::section \
+ "$SPACESHIP_GIT_STATUS_COLOR" \
+ "$SPACESHIP_GIT_STATUS_PREFIX$git_status$SPACESHIP_GIT_STATUS_SUFFIX"
+ fi
+}