Include SVN prompt.
[profile.git] / .profile.d / svn-completion.bashrc
1 function __svn_uuid() {
2   svn info 2>/dev/null | sed -n 's/^Repository UUID: //p'
3   return $?
4 }
5
6 function __svn_dir() {
7   local last="$1"; shift
8   local uuid=$(__svn_uuid)
9
10   if [ -n "$last" -a ! "$uuid" = "$last" ]; then
11     echo "$OLDPWD"
12     return 0
13   fi
14   last="$uuid"
15
16   cd ..
17   if [ "$PWD" = "$OLDPWD" ]; then
18     return 1
19   fi
20
21   __svn_dir "$last"
22   return $?
23 }
24
25 function __svn_url() {
26   local url=$(svn info "$1" 2>/dev/null | sed -n 's/^URL: //p')
27   [ $? -gt 0 ] && return 1
28   if [ "${url##*/}" = "trunk" ]; then
29     url="${url%%/trunk}"
30   fi
31   echo "${url##*/}"
32   return 0
33 }
34
35 function __svn_ps1() {
36   local base="$(__svn_dir)"
37   [ -z "$base" ] && return
38
39   local ps1=$(__svn_url "$base")
40   if [ $? -gt 0 ]; then
41     return
42   fi
43
44   if [ -n "${SVN_PS1_SHOWDIRTYSTATE-}" ]; then
45     local depth=
46     if [ -n "${SVN_PS1_DEPTH-}" ]; then
47       depth="--depth=$SVN_PS1_DEPTH"
48     fi
49     flags=$(svn status $depth "$base" 2>/dev/null | cut -c 1 | sort | uniq)
50     if [ -n "$flags" ]; then
51       if [ ! "${flags/[~!?]/}" = "$flags" ]; then
52         ps1="$ps1*"
53       fi
54       if [ ! "${flags/[ACDMR]/}" = "$flags" ]; then
55         ps1="$ps1+"
56       fi
57     fi
58   fi
59
60   if [ -n "${1-}" ]; then
61     printf "$1" "$ps1"
62   else
63     printf " (%s)" "$ps1"
64   fi
65 }