+# display version control information on right side of prompt if $VCS is set {{{
+# based on Mike Hommey's http://web.glandium.org/blog/?p=170
+ __vcs_dir() {
+ local vcs base_dir sub_dir ref
+ sub_dir() {
+ local sub_dir
+ sub_dir=$(readlink -f "${PWD}")
+ sub_dir=${sub_dir#$1}
+ echo ${sub_dir#/}
+ }
+
+ git_dir() {
+ base_dir=$(git-rev-parse --show-cdup 2>/dev/null) || return 1
+ base_dir=$(readlink -f "$base_dir/..")
+ sub_dir=$(git-rev-parse --show-prefix)
+ sub_dir=${sub_dir%/}
+ ref=$(git-symbolic-ref -q HEAD || git-name-rev --name-only HEAD 2>/dev/null)
+ ref=${ref#refs/heads/}
+ vcs="git"
+ }
+
+ svn_dir() {
+ [ -d ".svn" ] || return 1
+ base_dir="."
+ while [ -d "$base_dir/../.svn" ]; do base_dir="$base_dir/.."; done
+ base_dir=$(readlink -f "$base_dir")
+ sub_dir=$(sub_dir "${base_dir}")
+ ref=$(svn info "$base_dir" | awk '/^URL/ { sub(".*/","",$0); r=$0 } /^Revision/ { sub("[^0-9]*","",$0); print r":"$0 }')
+ vcs="svn"
+ }
+
+ svk_dir() {
+ [ -f ~/.svk/config ] || return 1
+ base_dir=$(awk '/: *$/ { sub(/^ */,"",$0); sub(/: *$/,"",$0); if (match("'${PWD}'", $0"(/|$)")) { print $0; d=1; } } /depotpath/ && d == 1 { sub(".*/","",$0); r=$0 } /revision/ && d == 1 { print r ":" $2; exit 1 }' ~/.svk/config) && return 1
+ ref=${base_dir##*
+ }
+ base_dir=${base_dir%%
+ *}
+ sub_dir=$(sub_dir "${base_dir}")
+ vcs="svk"
+ }
+
+ hg_dir() {
+ base_dir="."
+ while [ ! -d "$base_dir/.hg" ]; do base_dir="$base_dir/.."; [ $(readlink -f "${base_dir}") = "/" ] && return 1; done
+ base_dir=$(readlink -f "$base_dir")
+ sub_dir=$(sub_dir "${base_dir}")
+ ref=$(< "${base_dir}/.hg/branch")
+ vcs="hg"
+ }
+
+ hg_dir ||
+ git_dir ||
+ svn_dir ||
+ svk_dir # ||
+ # base_dir="$PWD"
+ # echo "${vcs:+($vcs)}${base_dir/$HOME/~}${vcs:+[$ref]${sub_dir}}"
+ echo "${vcs:+($vcs)}${base_dir}${vcs:+[$ref]${sub_dir}}"
+ }
+# }}}
+