diff --git a/bash_it.sh b/bash_it.sh index e09c3ba7..ab911019 100755 --- a/bash_it.sh +++ b/bash_it.sh @@ -121,12 +121,5 @@ if ! command -v reload &>/dev/null && [ -n "$BASH_IT_RELOAD_LEGACY" ]; then esac fi -# If gitstatusd is requested for the current shell, launch it if the shell is interactive -if [[ "${SCM_GIT_USE_GITSTATUSD}" == "true" ]] && [[ "$SCM_CHECK" == "true" ]] && [[ $- == *i* ]]; then - test -z "${SCM_GIT_GITSTATUSD_LOC}" || SCM_GIT_GITSTATUSD_LOC="$HOME/gitstatus/gitstatus.plugin.sh" - source "${SCM_GIT_GITSTATUSD_LOC}" - gitstatus_stop && gitstatus_start -s -1 -u -1 -c -1 -d -1 -fi - # Disable trap DEBUG on subshells - https://github.com/Bash-it/bash-it/pull/1040 set +T diff --git a/plugins/available/gitstatusd.plugin.bash b/plugins/available/gitstatusd.plugin.bash new file mode 100644 index 00000000..02794394 --- /dev/null +++ b/plugins/available/gitstatusd.plugin.bash @@ -0,0 +1,14 @@ +cite about-plugin +about-plugin 'speeds up your life by using gitstatusd for git status calculations. install from https://github.com/romkatv/gitstatus' + +[[ "$SCM_CHECK" == "true" ]] || return # No scm-check + +[[ $- == *i* ]] || return # non-interactive shell + +SCM_GIT_GITSTATUSD_LOC=${SCM_GIT_GITSTATUSD_LOC:="$HOME/gitstatus/gitstatus.plugin.sh"} +if [[ -f "${SCM_GIT_GITSTATUSD_LOC}" ]]; then + source "${SCM_GIT_GITSTATUSD_LOC}" + # Start the actual gitstatusd binary + gitstatus_stop && gitstatus_start -s -1 -u -1 -c -1 -d -1 + export SCM_GIT_USE_GITSTATUSD=true +fi diff --git a/template/bash_profile.template.bash b/template/bash_profile.template.bash index 9e9e6b9d..efafa8d9 100755 --- a/template/bash_profile.template.bash +++ b/template/bash_profile.template.bash @@ -32,9 +32,7 @@ export TODO="t" # Set this to false to turn off version control status checking within the prompt for all themes export SCM_CHECK=true -# when using Git, consider installing https://github.com/romkatv/gitstatus for faster status prompt -# enable it here if you wish, change the LOC variable if you did not choose the standard location in your home -#export SCM_GIT_USE_GITSTATUSD=true +# Set to actual location of gitstatusd if installed #export SCM_GIT_GITSTATUSD_LOC="$HOME/gitstatus/gitstatus.plugin.sh" # per default gitstatusd uses 2 times as many threads as CPU cores, you can change this here if you must #export GITSTATUS_NUM_THREADS=8 diff --git a/themes/base.theme.bash b/themes/base.theme.bash index fb362d78..26527659 100644 --- a/themes/base.theme.bash +++ b/themes/base.theme.bash @@ -35,7 +35,6 @@ SCM_GIT_SHOW_MINIMAL_INFO=${SCM_GIT_SHOW_MINIMAL_INFO:=false} SCM_GIT_SHOW_STASH_INFO=${SCM_GIT_SHOW_STASH_INFO:=true} SCM_GIT_SHOW_COMMIT_COUNT=${SCM_GIT_SHOW_COMMIT_COUNT:=true} SCM_GIT_USE_GITSTATUSD=${SCM_GIT_USE_GITSTATUSD:=false} -SCM_GIT_GITSTATUSD_LOC=${SCM_GIT_GITSTATUSD_LOC:="$HOME/gitstatus/gitstatus.plugin.sh"} SCM_GIT_GITSTATUSD_RAN=${SCM_GIT_GITSTATUSD_RAN:=false} SCM_GIT='git' @@ -194,7 +193,7 @@ function git_prompt_minimal_info { } function git_prompt_vars { - if ${SCM_GIT_USE_GITSTATUSD} && gitstatus_query && [[ "${VCS_STATUS_RESULT}" == "ok-sync" ]]; then # use faster gitstatusd + if ${SCM_GIT_USE_GITSTATUSD} && _command_exists gitstatus_query && gitstatus_query && [[ "${VCS_STATUS_RESULT}" == "ok-sync" ]]; then # use faster gitstatusd SCM_GIT_GITSTATUSD_RAN=true # use this in githelpers and below to choose gitstatusd output else SCM_GIT_GITSTATUSD_RAN=false diff --git a/themes/githelpers.theme.bash b/themes/githelpers.theme.bash index 2ee242df..fd5b3ce7 100644 --- a/themes/githelpers.theme.bash +++ b/themes/githelpers.theme.bash @@ -118,33 +118,35 @@ function _git-status-counts { function _git-remote-info { - if [[ "${SCM_GIT_GITSTATUSD_RAN}" == "true" ]]; then # prompt handling only, reimplement because patching the routine below gets ugly - [[ "${VCS_STATUS_REMOTE_NAME}" == "" ]] && return || true - [[ "${VCS_STATUS_LOCAL_BRANCH}" == "${VCS_STATUS_REMOTE_BRANCH}" ]] && local same_branch_name=true || true + # prompt handling only, reimplement because patching the routine below gets ugly + if [[ "${SCM_GIT_GITSTATUSD_RAN}" == "true" ]]; then + [[ "${VCS_STATUS_REMOTE_NAME}" == "" ]] && return + [[ "${VCS_STATUS_LOCAL_BRANCH}" == "${VCS_STATUS_REMOTE_BRANCH}" ]] && local same_branch_name=true local same_branch_name= [[ "${VCS_STATUS_LOCAL_BRANCH}" == "${VCS_STATUS_REMOTE_BRANCH}" ]] && same_branch_name=true - if [[ "${SCM_GIT_SHOW_REMOTE_INFO}" = "true" ]] || [[ "${SCM_GIT_SHOW_REMOTE_INFO}" = "auto" ]]; then # no multiple remote support in gitstatusd + # no multiple remote support in gitstatusd + if [[ "${SCM_GIT_SHOW_REMOTE_INFO}" = "true" || "${SCM_GIT_SHOW_REMOTE_INFO}" = "auto" ]]; then if [[ "${same_branch_name}" != "true" ]]; then - remote_info="\${VCS_STATUS_REMOTE_NAME}" + remote_info="${VCS_STATUS_REMOTE_NAME}/${VCS_STATUS_REMOTE_BRANCH}" else - remote_info="\${VCS_STATUS_REMOTE_NAME}/\${VCS_STATUS_REMOTE_BRANCH}" + remote_info="${VCS_STATUS_REMOTE_NAME}" fi elif [[ ${same_branch_name} != "true" ]]; then - remote_info="\${VCS_STATUS_REMOTE_BRANCH}" + remote_info="${VCS_STATUS_REMOTE_BRANCH}" fi if [[ -n "${remote_info}" ]];then - local branch_prefix - branch_prefix="${SCM_THEME_BRANCH_TRACK_PREFIX}" # no support for gone remote branches in gitstatusd + # no support for gone remote branches in gitstatusd + local branch_prefix="${SCM_THEME_BRANCH_TRACK_PREFIX}" echo "${branch_prefix}${remote_info}" fi - else - [[ "$(_git-upstream)" == "" ]] && return || true + else + [[ "$(_git-upstream)" == "" ]] && return - [[ "$(_git-branch)" == "$(_git-upstream-branch)" ]] && local same_branch_name=true || true + [[ "$(_git-branch)" == "$(_git-upstream-branch)" ]] && local same_branch_name=true local same_branch_name= [[ "$(_git-branch)" == "$(_git-upstream-branch)" ]] && same_branch_name=true - if ([[ "${SCM_GIT_SHOW_REMOTE_INFO}" = "auto" ]] && [[ "$(_git-num-remotes)" -ge 2 ]]) || - [[ "${SCM_GIT_SHOW_REMOTE_INFO}" = "true" ]]; then + if [[ ("${SCM_GIT_SHOW_REMOTE_INFO}" = "auto" && "$(_git-num-remotes)" -ge 2) || + "${SCM_GIT_SHOW_REMOTE_INFO}" = "true" ]]; then if [[ "${same_branch_name}" != "true" ]]; then remote_info="\$(_git-upstream)" else