+git_get_data(){
+ local gitdir gitbase gitbranch gitaction
+
+ gitdir=${vcs_comm[gitdir]}
+ gitbranch="$(git_getbranch ${gitdir})"
+
+ if [[ -z ${gitdir} ]] || [[ -z ${gitbranch} ]] ; then
+ return 1
+ fi
+
+ vcs_adjust
+ gitaction="$(git_getaction ${gitdir})"
+ gitprefix=$(git rev-parse --show-prefix)
+ gitbase=${PWD%/${gitprefix%/}}
+ vcs_formats "${gitaction}" "${gitbranch}" "${gitbase}" ''
+ return 0
+}
+
+hg_get_data(){
+ local hgbranch hgbase file
+
+ hgbase=${vcs_comm[basedir]}
+
+ # Check if hg branch is efficient
+ hgbranch=$(hg branch)
+
+ vcs_formats '' "${hgbranch}" "${hgbase}" ''
+ return 0
+}
+
+svn_get_data(){
+ local svnbase svnbranch
+ local -a svninfo
+
+ svnbase="."
+ while [[ -d "${svnbase}/../.svn" ]]; do
+ svnbase="${svnbase}/.."
+ done
+ svnbase="$(vcs_realpath ${svnbase})"
+ svnrev=$(svn info | awk '{if($1 == "Révision :") print $2}')
+ svnbranch=$(svn info | awk '{if($1 == "URL :") print $2}'|awk -F "/" '{ print $NF }')
+
+ vcs_formats '' "${svnbranch}" "${svnbase}" "${svnrev}"
+ return 0
+}
+
+bzr_get_data(){
+ local bzrbase bzrrev bzrbranch bzrinfo
+
+ bzrbase=$(bzr info|awk '{if ($1 == "branch" && $2 == "root:") print $3}')
+ bzrbase="$(vcs_realpath ${bzrbase})"
+ bzrinfo=$(bzr version-info|awk '{if ($1 == "branch-nick:"||$1 == "revno:") print $2}')
+ bzrrev=$(echo $bzrinfo|awk '{print $1}')
+ bzrbranch=$(echo $bzrinfo|awk '{print $2}')
+
+ vcs_formats '' "${bzrbranch}" "${bzrbase}" "${bzrrev}"
+ return 0
+}
+
+cdv_get_data(){
+ local cdvbase
+
+ cdvbase=${vcs_comm[basedir]}
+ vcs_formats '' "${cdvbase/*\/}" "${cdvbase}" ''
+ return 0
+}
+
+cvs_get_data(){
+ local cvsbranch cvsbase basename
+
+ cvsbase="."
+ while [[ -d "${cvsbase}/../CVS" ]]; do
+ cvsbase="${cvsbase}/.."
+ done
+ cvsbase="$(vcs_realpath ${cvsbase})"
+ cvsbranch=$(< ./CVS/Repository)
+ basename=${cvsbase/*\/}
+ cvsbranch=${cvsbranch#${basename}/}
+
+ [[ -z ${cvsbranch} ]] && cvsbranch=${basename}
+ vcs_formats '' "${cvsbranch}" "${cvsbase}" ''
+ return 0
+}
+
+darcs_get_data(){
+ local darcsbase
+
+ darcsbase=${vcs_comm[basedir]}
+ vcs_formats '' "${darcsbase/*\/}" "${darcsbase}" ''
+ return 0
+}
+
+vcs_info(){
+ local -i found
+ local -ax msgs
+ local -Ax vcs_comm commands
+ local -x vcs
+ local -a vcss
+ local -A disabled
+
+ vcs="init"
+ vcss=(git hg darcs svn bzr cvs cdv)
+ disabled[cdv]=1
+ disabled[cvs]=1
+ disabled[bzr]=1
+ for i in $(seq 0 $(( ${#vcss[*]} - 1 ))); do
+ if [[ disabled[${vcss[$i]}] -eq 1 ]]; then
+ continue
+ fi
+ commands[${vcss[$i]}]=$( (which ${vcss[$i]} 2>/dev/null >&2 && which ${vcss[i]})||echo true);
+ done;
+
+ found=0
+ for vcs in ${vcss[*]}; do
+ if [[ disabled[${vcs}] -eq 1 ]]; then
+ continue
+ fi
+ ${vcs}_detect && found=1 && break
+ done
+
+ (( found == 1 )) && ${vcs}_get_data
+
+ if [ ${color_prompt} = "yes" ]; then
+ VCS_info=${msgs[0]}
+ else
+ VCS_info=${msgs[1]}
+ fi
+ VCS_size=${#msgs[1]}
+}