From e267362a9acd18ae13488f48f38f269c866a8445 Mon Sep 17 00:00:00 2001 From: xylous Date: Sat, 15 May 2021 17:34:41 +0300 Subject: [PATCH] Simplify code --- gitstatus.plugin.zsh | 75 +++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 47 deletions(-) diff --git a/gitstatus.plugin.zsh b/gitstatus.plugin.zsh index 8d7e14d..7b96688 100644 --- a/gitstatus.plugin.zsh +++ b/gitstatus.plugin.zsh @@ -1,41 +1,29 @@ #!/usr/bin/zsh ### -# Do some cleaning if not in a git repository -# Globals: -# all -# Arguments: -# none +# Unset global variables +# Globals: all +# Arguments: none ### function sanitize() { - if ! git rev-parse --git-dir &>/dev/null; then - GIT_HAS_CHANGES=false - GIT_BRANCH="" - GIT_STAGED="" - GIT_MODIFIED="" - GIT_UNTRACKED="" - GIT_STATUS="" - return 1 - fi - - return 0 + unset GIT_CURRENT_BRANCH GIT_STATUS + unset GIT_STAGED GIT_MODIFIED GIT_UNTRACKED GIT_DELETED + git rev-parse --git-dir &>/dev/null || return 1 } ### # Get necessary information from git, like current branch, amount of modified # files etc. to then put them all into a global variable, GIT_STATUS -# Globals: -# none -# Arguments: -# none +# Globals: none +# Arguments: none ### function parse_git_status() { local modified_files=0 staged_files=0 untracked_files=0 deleted_files=0 - GIT_HAS_CHANGES=0 - GIT_BRANCH="$(git branch --show-current)" + local git_has_changes=0 + GIT_CURRENT_BRANCH="$(git branch --show-current)" git status --porcelain=v1 | while IFS= read -r status_line; do - GIT_HAS_CHANGES=1 + git_has_changes=1 case "$status_line" in ' M '*) ((modified_files++)) @@ -59,9 +47,10 @@ function parse_git_status() { GIT_REMOTE_BRANCH=$(git for-each-ref --format='%(upstream:short)' "$(git symbolic-ref -q HEAD)") local ahead_behind_status commits_behind commits_ahead if [[ ! -z ${GIT_REMOTE_BRANCH} ]]; then - ahead_behind_status=$(git rev-list --left-right --count ${GIT_BRANCH}...${GIT_REMOTE_BRANCH}) - commits_ahead=$(echo -n "$ahead_behind_status" | awk '{print $1}') - commits_behind=$(echo -n "$ahead_behind_status" | awk '{print $2}') + local ahead_behind_status=$(git rev-list --left-right --count \ + ${GIT_CURRENT_BRANCH}...${GIT_REMOTE_BRANCH}) + local commits_ahead=$(echo -n "$ahead_behind_status" | awk '{print $1}') + local commits_behind=$(echo -n "$ahead_behind_status" | awk '{print $2}') (( ${commits_behind} > 0)) \ && GIT_COMMITS_BEHIND="↓${commits_behind} " \ @@ -70,30 +59,24 @@ function parse_git_status() { && GIT_COMMITS_AHEAD="↑${commits_ahead} " \ || GIT_COMMITS_AHEAD="" fi + GIT_COMMITS_STATUS="${GIT_COMMITS_AHEAD}${GIT_COMMITS_BEHIND}" - (( ${staged_files} > 0 )) \ - && GIT_STAGED="${staged_files}+ " \ - || GIT_STAGED="" - (( ${modified_files} > 0 )) \ - && GIT_MODIFIED="!${modified_files} " \ - || GIT_MODIFIED="" - (( ${deleted_files} > 0 )) \ - && GIT_DELETED="${deleted_files}- " \ - || GIT_DELETED="" - (( ${untracked_files} > 0 )) \ - && GIT_UNTRACKED="?${untracked_files}" \ - || GIT_UNTRACKED="" - - if (( GIT_HAS_CHANGES == 1 )); then + if (( $git_has_changes )); then + (( ${staged_files} > 0 )) \ + && GIT_STAGED="+${staged_files} " + (( ${modified_files} > 0 )) \ + && GIT_MODIFIED="!${modified_files} " + (( ${deleted_files} > 0 )) \ + && GIT_DELETED="-${deleted_files} " + (( ${untracked_files} > 0 )) \ + && GIT_UNTRACKED="?${untracked_files}" FG_SPECIAL_COLOR="${FG_YELLOW}" else FG_SPECIAL_COLOR="${FG_GREEN}" fi - - GIT_COMMITS_STATUS="${GIT_COMMITS_AHEAD}${GIT_COMMITS_BEHIND}" - GIT_STATUS="| ${FG_SPECIAL_COLOR}" - GIT_STATUS+=" ${GIT_BRANCH} " + GIT_STATUS="${FG_SPECIAL_COLOR}" + GIT_STATUS+=" ${GIT_CURRENT_BRANCH} " GIT_STATUS+="${GIT_COMMITS_STATUS}" GIT_STATUS+="${GIT_MODIFIED}${GIT_STAGED}" GIT_STATUS+="${GIT_DELETED}${GIT_UNTRACKED}" @@ -108,9 +91,7 @@ function parse_git_status() { # none ### function main() { - if ! sanitize; then - return 0 - fi + sanitize || return 1 parse_git_status }