summaryrefslogtreecommitdiff
path: root/zshfunc/vcs-info/VCS_INFO_svk_detect
diff options
context:
space:
mode:
Diffstat (limited to 'zshfunc/vcs-info/VCS_INFO_svk_detect')
-rw-r--r--zshfunc/vcs-info/VCS_INFO_svk_detect34
1 files changed, 34 insertions, 0 deletions
diff --git a/zshfunc/vcs-info/VCS_INFO_svk_detect b/zshfunc/vcs-info/VCS_INFO_svk_detect
new file mode 100644
index 0000000..1bd4c7f
--- /dev/null
+++ b/zshfunc/vcs-info/VCS_INFO_svk_detect
@@ -0,0 +1,34 @@
+VCS_INFO_svk_detect() { #{{{
+ setopt localoptions noksharrays extendedglob
+ local -a info
+ local -i fhash
+ fhash=0
+
+ VCS_INFO_check_com svk || return 1
+ [[ -f ~/.svk/config ]] || return 1
+
+ # This detection function is a bit different from the others.
+ # We need to read svk's config file to detect a svk repository
+ # in the first place. Therefore, we'll just proceed and read
+ # the other information, too. This is more then any of the
+ # other detections do but this takes only one file open for
+ # svk at most. VCS_INFO_svk_get_data() get simpler, too. :-)
+ while IFS= read -r line ; do
+ if [[ -n ${vcs_comm[basedir]} ]] ; then
+ line=${line## ##}
+ [[ ${line} == depotpath:* ]] && vcs_comm[branch]=${line##*/}
+ [[ ${line} == revision:* ]] && vcs_comm[revision]=${line##*[[:space:]]##}
+ [[ -n ${vcs_comm[branch]} ]] && [[ -n ${vcs_comm[revision]} ]] && break
+ continue
+ fi
+ (( fhash > 0 )) && [[ ${line} == ' '[^[:space:]]*:* ]] && break
+ [[ ${line} == ' hash:'* ]] && fhash=1 && continue
+ (( fhash == 0 )) && continue
+ [[ ${PWD}/ == ${${line## ##}%:*}/* ]] && vcs_comm[basedir]=${${line## ##}%:*}
+ done < ~/.svk/config
+
+ [[ -n ${vcs_comm[basedir]} ]] && \
+ [[ -n ${vcs_comm[branch]} ]] && \
+ [[ -n ${vcs_comm[revision]} ]] && return 0
+ return 1
+}