svn-fast-info.plugin.zsh 2.22 KB
Newer Older
Brice Dutheil's avatar
Brice Dutheil committed
1
2
3
4
5
6
7
8
9
10
11
12
# vim:ft=zsh ts=2 sw=2 sts=2
#
# Faster alternative to the current SVN plugin implementation.
#
# Works with svn 1.6, 1.7, 1.8.
# Use `svn_prompt_info` method to enquire the svn data.
# It's faster because his efficient use of svn (single svn call) done in the `parse_svn` function
# Also changed prompt suffix *after* the svn dirty marker
#
# *** IMPORTANT *** DO NO USE with the simple svn plugin, this plugin acts as a replacement of it.

function parse_svn() {
Brice Dutheil's avatar
Brice Dutheil committed
13
	info=$(svn info 2>&1) || return; # capture stdout and stdout
Brice Dutheil's avatar
Brice Dutheil committed
14
15
16
17
18
19
20
21
22
23
24
    in_svn=true
	repo_need_upgrade="$(svn_repo_need_upgrade $info)"
    svn_branch_name="$(svn_get_branch_name $info)"
    svn_dirty="$(svn_dirty_choose)"
    svn_repo_name="$(svn_get_repo_name $info)"
    svn_rev="$(svn_get_revision $info)"
}

function svn_prompt_info() {
    eval parse_svn

Brice Dutheil's avatar
Brice Dutheil committed
25
26
27
28
29
30
31
	if [ ! -z $repo_need_upgrade ]; then
		echo $ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_PREFIX$ZSH_PROMPT_BASE_COLOR\
$repo_need_upgrade\
$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_SUFFIX$ZSH_PROMPT_BASE_COLOR
	fi

    if [[ ${in_svn} == true && -z $repo_need_upgrade ]]; then
Brice Dutheil's avatar
Brice Dutheil committed
32
33
34
35
36
37
38
39
40
41
42
        echo "$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_PREFIX\
$ZSH_THEME_REPO_NAME_COLOR${svn_branch_name}\
$ZSH_PROMPT_BASE_COLOR${svn_dirty}\
$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_SVN_PROMPT_SUFFIX\
$ZSH_PROMPT_BASE_COLOR"
    fi
}


function svn_repo_need_upgrade() {
	info=$1
Brice Dutheil's avatar
Brice Dutheil committed
43
44
	[ -z "${info}" ] && info=$(svn info 2>&1)
	if grep -q "E155036" <<< $info; then echo "E155036: upgrade repo with svn upgrade"; fi
Brice Dutheil's avatar
Brice Dutheil committed
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
}

function svn_get_branch_name() {
	info=$1
	[ -z "${info}" ] && info=$(svn info 2> /dev/null)
    echo $info | grep '^URL:' | egrep -o '(tags|branches)/[^/]+|trunk' | egrep -o '[^/]+$' | read SVN_URL
    echo $SVN_URL
}

function svn_get_repo_name() {
	info=$1
	[ -z "${info}" ] && info=$(svn info 2> /dev/null)
    echo $info | sed -n 's/Repository\ Root:\ .*\///p' | read SVN_ROOT
    echo $info | sed -n "s/URL:\ .*$SVN_ROOT\///p"
}

function svn_get_revision() {
	info=$1
	[ -z "${info}" ] && info=$(svn info 2> /dev/null)
    echo $info 2> /dev/null | sed -n s/Revision:\ //p
}

function svn_dirty_choose() {
    svn status | grep -E '^\s*[ACDIM!?L]' > /dev/null 2>/dev/null && echo $ZSH_THEME_SVN_PROMPT_DIRTY && return
    echo $ZSH_THEME_SVN_PROMPT_CLEAN
Brice Dutheil's avatar
Brice Dutheil committed
70
}