Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Ohmyzsh
Commits
8bf8e1ec
Commit
8bf8e1ec
authored
Jan 07, 2014
by
LFDM
Browse files
Heavy refactor of svn-fast-info
parent
642ae64b
Changes
1
Hide whitespace changes
Inline
Side-by-side
plugins/svn-fast-info/svn-fast-info.plugin.zsh
View file @
8bf8e1ec
# vim:ft=zsh ts=2 sw=2 sts=2
# vim:ft=zsh ts=2 sw=2 sts=2
et
#
# Faster alternative to the current SVN plugin implementation.
#
...
...
@@ -10,57 +10,69 @@
# *** IMPORTANT *** DO NO USE with the simple svn plugin, this plugin acts as a replacement of it.
function
svn_prompt_info
()
{
info
=
$(
svn info 2>&1
)
||
return
;
# capture stdout and stdout
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
)
"
local
info
info
=
$(
svn info 2>&1
)
||
return
1
;
# capture stdout and stderr
local
repo_need_upgrade
=
$(
svn_repo_need_upgrade
$info
)
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
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
if
[
-n
$repo_need_upgrade
]
;
then
printf
'%s%s%s%s%s%s%s\n'
\
$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
\
else
# something left for you to fix -
# repo name and rev aren't used here, did you forget them?
# especially since you set a repo name color
# if the prompt is alright this way, leave it as is and just
# delete the comment. The functions itself could stay imo,
# gives others the chance to use them.
printf
'%s%s%s%s%s%s%s%s%s\n'
\
$ZSH_PROMPT_BASE_COLOR
\
$ZSH_THEME_SVN_PROMPT_PREFIX
\
$ZSH_THEME_REPO_NAME_COLOR
\
$(
svn_get_branch_name
$info
)
${
svn_branch_name
}
\
$ZSH_PROMPT_BASE_COLOR
$(
svn_dirty_choose
$info
)
$ZSH_PROMPT_BASE_COLOR
$ZSH_THEME_SVN_PROMPT_SUFFIX
\
$ZSH_PROMPT_BASE_COLOR
fi
}
function
svn_repo_need_upgrade
()
{
info
=
$1
[
-z
"
${
info
}
"
]
&&
info
=
$(
svn info 2>&1
)
if
grep
-q
"E155036"
<<<
$info
;
then
echo
"E155036: upgrade repo with svn upgrade"
;
fi
grep
-q
"E155036"
<<<
${
1
:-
$(
svn info 2> /dev/null
)
}
&&
\
echo
"E155036: upgrade repo with svn upgrade"
}
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
echo
${
1
:-
$(
svn info 2> /dev/null
)
}
|
\
grep
'^URL:'
| egrep
-o
'(tags|branches)/[^/]+|trunk'
|
\
egrep
-o
'[^/]+$'
}
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"
# I think this can be further cleaned up as well, not sure how,
# as I can't test it
local
svn_root
local
info
=
${
1
:-
$(
svn info 2> /dev/null
)
}
echo
$info
|
sed
's/Repository\ Root:\ .*\///p'
|
read
svn_root
echo
$info
|
sed
"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
# does this work as it should?
echo
${
1
:-
$(
svn info 2> /dev/null
)
}
|
sed
'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
if
svn status |
grep
-E
'^\s*[ACDIM!?L]'
&> /dev/null
;
then
echo
$ZSH_THEME_SVN_PROMPT_DIRTY
else
echo
$ZSH_THEME_SVN_PROMPT_CLEAN
fi
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment