From 88378fd2f7a5142fbcc04eb007a35cd9589065bf Mon Sep 17 00:00:00 2001 From: Matthew Attaway Date: Fri, 20 Mar 2015 22:39:38 -0700 Subject: [PATCH] Add support for Perforce when using the DVCS capabilities This change adds support for showing the branch, status, and synced change number. This only works inside a local server and not when working with a shared server. --- themes/base.theme.bash | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/themes/base.theme.bash b/themes/base.theme.bash index 584fb9ce..fa0e76ab 100644 --- a/themes/base.theme.bash +++ b/themes/base.theme.bash @@ -26,6 +26,9 @@ SCM_GIT_STAGED_CHAR="S:" SCM_HG='hg' SCM_HG_CHAR='☿' +SCM_P4='p4' +SCM_P4_CHAR='P' + SCM_SVN='svn' SCM_SVN_CHAR='⑆' @@ -50,6 +53,8 @@ function scm { elif which git &> /dev/null && [[ -n "$(git symbolic-ref HEAD 2> /dev/null)" ]]; then SCM=$SCM_GIT elif [[ -d .hg ]]; then SCM=$SCM_HG elif which hg &> /dev/null && [[ -n "$(hg root 2> /dev/null)" ]]; then SCM=$SCM_HG + elif [[ -d .p4root ]]; then SCM=$SCM_P4 + elif which p4 &> /dev/null && [[ -n "$(p4 -ztag info 2> /dev/null | grep '... serverServices local')" ]]; then SCM=$SCM_P4 elif [[ -d .svn ]]; then SCM=$SCM_SVN else SCM=$SCM_NONE fi @@ -59,6 +64,7 @@ function scm_prompt_char { if [[ -z $SCM ]]; then scm; fi if [[ $SCM == $SCM_GIT ]]; then SCM_CHAR=$SCM_GIT_CHAR elif [[ $SCM == $SCM_HG ]]; then SCM_CHAR=$SCM_HG_CHAR + elif [[ $SCM == $SCM_P4 ]]; then SCM_CHAR=$SCM_P4_CHAR elif [[ $SCM == $SCM_SVN ]]; then SCM_CHAR=$SCM_SVN_CHAR else SCM_CHAR=$SCM_NONE_CHAR fi @@ -71,6 +77,7 @@ function scm_prompt_vars { SCM_STATE='' [[ $SCM == $SCM_GIT ]] && git_prompt_vars && return [[ $SCM == $SCM_HG ]] && hg_prompt_vars && return + [[ $SCM == $SCM_P4 ]] && p4_prompt_vars && return [[ $SCM == $SCM_SVN ]] && svn_prompt_vars && return } @@ -81,6 +88,7 @@ function scm_prompt_info { SCM_STATE='' [[ $SCM == $SCM_GIT ]] && git_prompt_info && return [[ $SCM == $SCM_HG ]] && hg_prompt_info && return + [[ $SCM == $SCM_P4 ]] && p4_prompt_info && return [[ $SCM == $SCM_SVN ]] && svn_prompt_info && return } @@ -199,6 +207,20 @@ function hg_prompt_vars { fi } +function p4_prompt_vars { + if [[ -n $(p4 status 2> /dev/null | grep -v 'No file(s)') ]]; then + SCM_DIRTY=1 + SCM_STATE=${P4_THEME_PROMPT_DIRTY:-$SCM_THEME_PROMPT_DIRTY} + else + SCM_DIRTY=0 + SCM_STATE=${P4_THEME_PROMPT_CLEAN:-$SCM_THEME_PROMPT_CLEAN} + fi + SCM_PREFIX=${P4_THEME_PROMPT_PREFIX:-$SCM_THEME_PROMPT_PREFIX} + SCM_SUFFIX=${P4_THEME_PROMPT_SUFFIX:-$SCM_THEME_PROMPT_SUFFIX} + SCM_BRANCH=$(p4 switch 2> /dev/null) + SCM_CHANGE=$(p4 changes -m1 ...#have 2> /dev/null | cut -d ' ' -f 2 ) +} + function rvm_version_prompt { if which rvm &> /dev/null; then rvm=$(rvm tools identifier) || return @@ -266,6 +288,11 @@ function hg_prompt_info() { echo -e "$SCM_PREFIX$SCM_BRANCH:${SCM_CHANGE#*:}$SCM_STATE$SCM_SUFFIX" } +function p4_prompt_info() { + p4_prompt_vars + echo -e "$SCM_PREFIX$SCM_BRANCH:${SCM_CHANGE#*:}$SCM_STATE$SCM_SUFFIX" +} + function scm_char { scm_prompt_char echo -e "$SCM_CHAR"