about summary refs log tree commit diff
path: root/Functions/VCS_Info/vcs_info
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2008-09-19 12:58:46 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2008-09-19 12:58:46 +0000
commit23f2b4503c9d7697e382fed550d3bf846b81dd5c (patch)
tree8953de32c2d4126882d9d4c66bcbe7b8615e3419 /Functions/VCS_Info/vcs_info
parentd9f1432e074872aa3a89515bc65ede5ad6551a47 (diff)
downloadzsh-23f2b4503c9d7697e382fed550d3bf846b81dd5c.tar.gz
zsh-23f2b4503c9d7697e382fed550d3bf846b81dd5c.tar.xz
zsh-23f2b4503c9d7697e382fed550d3bf846b81dd5c.zip
users/13252 and elsewhere: Frank Terbeck plus tweaks:
add VCS_Info function system
Diffstat (limited to 'Functions/VCS_Info/vcs_info')
-rw-r--r--Functions/VCS_Info/vcs_info90
1 files changed, 90 insertions, 0 deletions
diff --git a/Functions/VCS_Info/vcs_info b/Functions/VCS_Info/vcs_info
new file mode 100644
index 000000000..9a4d2489e
--- /dev/null
+++ b/Functions/VCS_Info/vcs_info
@@ -0,0 +1,90 @@
+## vim:ft=zsh:foldmethod=marker
+##
+## vcs_info - provide version control information
+##
+## Written by Frank Terbeck <ft@bewatermyfriend.org>
+##
+## This file and all corresponding files in Functions/VCS_Info/ are
+## distributed under the same BSD-ish license as zsh itself.
+##
+
+setopt localoptions noksharrays extendedglob NO_shwordsplit
+local file func sys
+local -a static_functions
+
+static_functions=(
+    VCS_INFO_adjust
+    VCS_INFO_bydir_detect
+    VCS_INFO_check_com
+    VCS_INFO_formats
+    VCS_INFO_maxexports
+    VCS_INFO_nvcsformats
+    VCS_INFO_realpath
+    VCS_INFO_reposub
+    VCS_INFO_set
+
+    vcs_info_lastmsg
+    vcs_info_printsys
+    vcs_info_setsys
+)
+
+for func in ${static_functions} ; do
+    autoload -Uz ${func}
+done
+
+VCS_INFO_set --nvcs '-preinit-'
+vcs_info_setsys
+
+# and now, finally create the real vcs_info function
+vcs_info () {
+    setopt localoptions noksharrays extendedglob
+    local -i found
+    local -a enabled disabled
+    local -x usercontext vcs rrn
+    local -ix maxexports
+    local -ax msgs
+    local -Ax vcs_comm
+
+    vcs='-init-'; rrn='-all-'
+    usercontext=${1:-default}
+
+    zstyle -a ":vcs_info:${vcs}:${usercontext}:${rrn}" "enable" enabled
+    (( ${#enabled} == 0 )) && enabled=( all )
+
+    if [[ -n ${(M)enabled:#(#i)none} ]] ; then
+        [[ -n ${vcs_info_msg_0_} ]] && VCS_INFO_set --clear
+        return 0
+    fi
+
+    if [[ -n ${(M)enabled:#(#i)all} ]] ; then
+        enabled=( ${VCS_INFO_backends} )
+        zstyle -a ":vcs_info:${vcs}:${usercontext}:${rrn}" "disable" disabled
+    fi
+
+    VCS_INFO_maxexports
+
+    (( found = 0 ))
+    for vcs in ${enabled} ; do
+        [[ -n ${(M)disabled:#${vcs}} ]] && continue
+        if (( ${+functions[VCS_INFO_detect_${vcs}]} == 0 )) ; then
+            printf 'vcs_info: configured unknown backend: '\''%s'\''\n' ${vcs}
+            printf 'vcs_info: use '\''vcs_info_printsys'\'' to find supported systems.\n'
+            continue
+        fi
+        vcs_comm=()
+        VCS_INFO_detect_${vcs} && (( found = 1 )) && break
+    done
+
+    (( found == 0 )) && {
+        VCS_INFO_set --nvcs
+        return 0
+    }
+
+    VCS_INFO_get_data_${vcs} || {
+        VCS_INFO_set --nvcs
+        return 1
+    }
+
+    VCS_INFO_set
+    return 0
+}