Adding SCM Branch Information to Your Prompt
Monday, October 25, 2010 |UPDATE: I’ve modified the scripts and prompt settings to be a bit more intelligent
Today, a coworker sent me a link to an old blog post about adding git and svn branch information to your prompt. As awesome and helpful as that was, my first thought was, "What about hg support?" followed quickly, if not somewhat embarrassingly, by, "What about CVS support?" Thinking it would be quicker (and more fun) to hack than to google, I added both. The end result is this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
parse_git_branch () {
git name-rev HEAD 2> /dev/null | sed 's#HEAD\ \(.*\)# (git::\1)#'
}
parse_hg_branch() {
hg branch 2>/dev/null | sed 's#\(.*\)# (hg::\1)#'
}
parse_svn_branch() {
parse_svn_url | sed -e 's#^'"$(parse_svn_repository_root)"'##g' | awk '{print " (svn::"$1")" }'
}
parse_svn_url() {
if [ -e .svn ] ; then
svn info 2>/dev/null | sed -ne 's#^URL: ##p' | sed -e 's#^'"$(parse_svn_repository_root)"'##g' | egrep -o '(tags|branches)/[^/]+|trunk' | egrep -o '[^/]+$' | awk '{print " ("$1")" }'
fi
}
parse_svn_repository_root() {
if [ -e .svn ] ; then
svn info 2>/dev/null | sed -ne 's#^Repository Root: ##p'
fi
}
parse_cvs_branch() {
if [ -e CVS ] ; then
#cat CVS/TAG | cut -c 2- 2>/dev/null | sed '#\(.*\)# (cvs::\1)#'
BRANCH=`cat CVS/TAG 2>/dev/null | cut -c 2- ` ; if [ "$BRANCH" != "" ] ; then echo " (cvs::$BRANCH)" ; fi
fi
}
get_branch_information() {
if [ -e .svn ] ; then
parse_svn_branch
elif [ -e CVS ] ; then
parse_cvs_branch
else
parse_git_branch
parse_hg_branch
fi
}
BLACK="\[\033[0;38m\]"
RED="\[\033[0;31m\]"
RED_BOLD="\[\033[01;31m\]"
BLUE="\[\033[01;34m\]"
GREEN="\[\033[0;32m\]"
export PS1="$BLACK[ \u@$RED\h $GREEN\w$RED_BOLD\$(get_branch_information)$BLACK ] "
I should note that there seems to be a slight performance hit due to all of this, but I can’t tell if it’s all these new checks or if my machine is just already working too hard. Either way, it’s nowhere near significant enough to make me care. :)