From 39b03192816e15a611115e9a2c81de974795da06 Mon Sep 17 00:00:00 2001 From: Peter Palfrader Date: Sun, 28 Jun 2009 00:00:33 +0000 Subject: Undo split of vsc-info into individual per-function files git-svn-id: svn+ssh://asteria.noreply.org/svn/weaselutils/trunk@401 bc3d92e2-beff-0310-a7cd-cc87d7ac0ede --- zshfunc/vcs-info/VCS_INFO_adjust | 4 - zshfunc/vcs-info/VCS_INFO_bzr_detect | 6 - zshfunc/vcs-info/VCS_INFO_bzr_get_data | 23 - zshfunc/vcs-info/VCS_INFO_cdv_detect | 6 - zshfunc/vcs-info/VCS_INFO_cdv_get_data | 7 - zshfunc/vcs-info/VCS_INFO_check_com | 4 - zshfunc/vcs-info/VCS_INFO_cvs_detect | 5 - zshfunc/vcs-info/VCS_INFO_cvs_get_data | 15 - zshfunc/vcs-info/VCS_INFO_darcs_detect | 6 - zshfunc/vcs-info/VCS_INFO_darcs_get_data | 7 - zshfunc/vcs-info/VCS_INFO_detect_by_dir | 22 - zshfunc/vcs-info/VCS_INFO_formats | 27 - zshfunc/vcs-info/VCS_INFO_git_detect | 9 - zshfunc/vcs-info/VCS_INFO_git_get_data | 17 - zshfunc/vcs-info/VCS_INFO_git_getaction | 47 -- zshfunc/vcs-info/VCS_INFO_git_getbranch | 35 -- zshfunc/vcs-info/VCS_INFO_hg_detect | 6 - zshfunc/vcs-info/VCS_INFO_hg_get_data | 15 - zshfunc/vcs-info/VCS_INFO_maxexports | 8 - zshfunc/vcs-info/VCS_INFO_mtn_detect | 6 - zshfunc/vcs-info/VCS_INFO_mtn_get_data | 8 - zshfunc/vcs-info/VCS_INFO_nvcsformats | 11 - zshfunc/vcs-info/VCS_INFO_realpath | 11 - zshfunc/vcs-info/VCS_INFO_reposub | 11 - zshfunc/vcs-info/VCS_INFO_set | 24 - zshfunc/vcs-info/VCS_INFO_svk_detect | 34 -- zshfunc/vcs-info/VCS_INFO_svk_get_data | 9 - zshfunc/vcs-info/VCS_INFO_svn_detect | 5 - zshfunc/vcs-info/VCS_INFO_svn_get_data | 17 - zshfunc/vcs-info/VCS_INFO_tla_detect | 5 - zshfunc/vcs-info/VCS_INFO_tla_get_data | 9 - zshfunc/vcs-info/grml-vcs-info | 844 ------------------------------- zshfunc/vcs-info/vcs_info | 68 --- zshfunc/vcs-info/vcs_info_lastmsg | 14 - zshfunc/vcs-info/vcs_info_printsys | 3 - zshfunc/vcs_info | 844 +++++++++++++++++++++++++++++++ 36 files changed, 844 insertions(+), 1348 deletions(-) delete mode 100644 zshfunc/vcs-info/VCS_INFO_adjust delete mode 100644 zshfunc/vcs-info/VCS_INFO_bzr_detect delete mode 100644 zshfunc/vcs-info/VCS_INFO_bzr_get_data delete mode 100644 zshfunc/vcs-info/VCS_INFO_cdv_detect delete mode 100644 zshfunc/vcs-info/VCS_INFO_cdv_get_data delete mode 100644 zshfunc/vcs-info/VCS_INFO_check_com delete mode 100644 zshfunc/vcs-info/VCS_INFO_cvs_detect delete mode 100644 zshfunc/vcs-info/VCS_INFO_cvs_get_data delete mode 100644 zshfunc/vcs-info/VCS_INFO_darcs_detect delete mode 100644 zshfunc/vcs-info/VCS_INFO_darcs_get_data delete mode 100644 zshfunc/vcs-info/VCS_INFO_detect_by_dir delete mode 100644 zshfunc/vcs-info/VCS_INFO_formats delete mode 100644 zshfunc/vcs-info/VCS_INFO_git_detect delete mode 100644 zshfunc/vcs-info/VCS_INFO_git_get_data delete mode 100644 zshfunc/vcs-info/VCS_INFO_git_getaction delete mode 100644 zshfunc/vcs-info/VCS_INFO_git_getbranch delete mode 100644 zshfunc/vcs-info/VCS_INFO_hg_detect delete mode 100644 zshfunc/vcs-info/VCS_INFO_hg_get_data delete mode 100644 zshfunc/vcs-info/VCS_INFO_maxexports delete mode 100644 zshfunc/vcs-info/VCS_INFO_mtn_detect delete mode 100644 zshfunc/vcs-info/VCS_INFO_mtn_get_data delete mode 100644 zshfunc/vcs-info/VCS_INFO_nvcsformats delete mode 100644 zshfunc/vcs-info/VCS_INFO_realpath delete mode 100644 zshfunc/vcs-info/VCS_INFO_reposub delete mode 100644 zshfunc/vcs-info/VCS_INFO_set delete mode 100644 zshfunc/vcs-info/VCS_INFO_svk_detect delete mode 100644 zshfunc/vcs-info/VCS_INFO_svk_get_data delete mode 100644 zshfunc/vcs-info/VCS_INFO_svn_detect delete mode 100644 zshfunc/vcs-info/VCS_INFO_svn_get_data delete mode 100644 zshfunc/vcs-info/VCS_INFO_tla_detect delete mode 100644 zshfunc/vcs-info/VCS_INFO_tla_get_data delete mode 100644 zshfunc/vcs-info/grml-vcs-info delete mode 100644 zshfunc/vcs-info/vcs_info delete mode 100644 zshfunc/vcs-info/vcs_info_lastmsg delete mode 100644 zshfunc/vcs-info/vcs_info_printsys create mode 100644 zshfunc/vcs_info (limited to 'zshfunc') diff --git a/zshfunc/vcs-info/VCS_INFO_adjust b/zshfunc/vcs-info/VCS_INFO_adjust deleted file mode 100644 index 2d2c6d0..0000000 --- a/zshfunc/vcs-info/VCS_INFO_adjust +++ /dev/null @@ -1,4 +0,0 @@ -VCS_INFO_adjust () { #{{{ - [[ -n ${vcs_comm[overwrite_name]} ]] && vcs=${vcs_comm[overwrite_name]} - return 0 -} diff --git a/zshfunc/vcs-info/VCS_INFO_bzr_detect b/zshfunc/vcs-info/VCS_INFO_bzr_detect deleted file mode 100644 index 3faa78d..0000000 --- a/zshfunc/vcs-info/VCS_INFO_bzr_detect +++ /dev/null @@ -1,6 +0,0 @@ -VCS_INFO_bzr_detect() { #{{{ - VCS_INFO_check_com bzr || return 1 - vcs_comm[detect_need_file]=branch/format - VCS_INFO_detect_by_dir '.bzr' - return $? -} diff --git a/zshfunc/vcs-info/VCS_INFO_bzr_get_data b/zshfunc/vcs-info/VCS_INFO_bzr_get_data deleted file mode 100644 index e0931dc..0000000 --- a/zshfunc/vcs-info/VCS_INFO_bzr_get_data +++ /dev/null @@ -1,23 +0,0 @@ -VCS_INFO_bzr_get_data () { # {{{ - setopt localoptions noksharrays - local bzrbase bzrbr - local -a bzrinfo - - if zstyle -t ":vcs_info:${vcs}:${usercontext}" "use-simple" ; then - bzrbase=${vcs_comm[basedir]} - bzrinfo[2]=${bzrbase:t} - if [[ -f ${bzrbase}/.bzr/branch/last-revision ]] ; then - bzrinfo[1]=$(< ${bzrbase}/.bzr/branch/last-revision) - bzrinfo[1]=${${bzrinfo[1]}%% *} - fi - else - bzrbase=${${(M)${(f)"$( bzr info )"}:# ##branch\ root:*}/*: ##/} - bzrinfo=( ${${${(M)${(f)"$( bzr version-info )"}:#(#s)(revno|branch-nick)*}/*: /}/*\//} ) - bzrbase="$(VCS_INFO_realpath ${bzrbase})" - fi - - zstyle -s ":vcs_info:${vcs}:${usercontext}" branchformat bzrbr || bzrbr="%b:%r" - zformat -f bzrbr "${bzrbr}" "b:${bzrinfo[2]}" "r:${bzrinfo[1]}" - VCS_INFO_formats '' "${bzrbr}" "${bzrbase}" - return 0 -} diff --git a/zshfunc/vcs-info/VCS_INFO_cdv_detect b/zshfunc/vcs-info/VCS_INFO_cdv_detect deleted file mode 100644 index 5f05823..0000000 --- a/zshfunc/vcs-info/VCS_INFO_cdv_detect +++ /dev/null @@ -1,6 +0,0 @@ -VCS_INFO_cdv_detect() { #{{{ - VCS_INFO_check_com cdv || return 1 - vcs_comm[detect_need_file]=format - VCS_INFO_detect_by_dir '.cdv' - return $? -} diff --git a/zshfunc/vcs-info/VCS_INFO_cdv_get_data b/zshfunc/vcs-info/VCS_INFO_cdv_get_data deleted file mode 100644 index 8c812cc..0000000 --- a/zshfunc/vcs-info/VCS_INFO_cdv_get_data +++ /dev/null @@ -1,7 +0,0 @@ -VCS_INFO_cdv_get_data () { # {{{ - local cdvbase - - cdvbase=${vcs_comm[basedir]} - VCS_INFO_formats '' "${cdvbase:t}" "${cdvbase}" - return 0 -} diff --git a/zshfunc/vcs-info/VCS_INFO_check_com b/zshfunc/vcs-info/VCS_INFO_check_com deleted file mode 100644 index 7895241..0000000 --- a/zshfunc/vcs-info/VCS_INFO_check_com +++ /dev/null @@ -1,4 +0,0 @@ -VCS_INFO_check_com () { #{{{ - (( ${+commands[$1]} )) && [[ -x ${commands[$1]} ]] && return 0 - return 1 -} diff --git a/zshfunc/vcs-info/VCS_INFO_cvs_detect b/zshfunc/vcs-info/VCS_INFO_cvs_detect deleted file mode 100644 index d3d2b2a..0000000 --- a/zshfunc/vcs-info/VCS_INFO_cvs_detect +++ /dev/null @@ -1,5 +0,0 @@ -VCS_INFO_cvs_detect() { #{{{ - VCS_INFO_check_com svn || return 1 - [[ -d "./CVS" ]] && [[ -r "./CVS/Repository" ]] && return 0 - return 1 -} diff --git a/zshfunc/vcs-info/VCS_INFO_cvs_get_data b/zshfunc/vcs-info/VCS_INFO_cvs_get_data deleted file mode 100644 index b8b9ad3..0000000 --- a/zshfunc/vcs-info/VCS_INFO_cvs_get_data +++ /dev/null @@ -1,15 +0,0 @@ -VCS_INFO_cvs_get_data () { # {{{ - local cvsbranch cvsbase basename - - cvsbase="." - while [[ -d "${cvsbase}/../CVS" ]]; do - cvsbase="${cvsbase}/.." - done - cvsbase="$(VCS_INFO_realpath ${cvsbase})" - cvsbranch=$(< ./CVS/Repository) - basename=${cvsbase:t} - cvsbranch=${cvsbranch##${basename}/} - [[ -z ${cvsbranch} ]] && cvsbranch=${basename} - VCS_INFO_formats '' "${cvsbranch}" "${cvsbase}" - return 0 -} diff --git a/zshfunc/vcs-info/VCS_INFO_darcs_detect b/zshfunc/vcs-info/VCS_INFO_darcs_detect deleted file mode 100644 index ff79327..0000000 --- a/zshfunc/vcs-info/VCS_INFO_darcs_detect +++ /dev/null @@ -1,6 +0,0 @@ -VCS_INFO_darcs_detect() { #{{{ - VCS_INFO_check_com darcs || return 1 - vcs_comm[detect_need_file]=format - VCS_INFO_detect_by_dir '_darcs' - return $? -} diff --git a/zshfunc/vcs-info/VCS_INFO_darcs_get_data b/zshfunc/vcs-info/VCS_INFO_darcs_get_data deleted file mode 100644 index eddbd89..0000000 --- a/zshfunc/vcs-info/VCS_INFO_darcs_get_data +++ /dev/null @@ -1,7 +0,0 @@ -VCS_INFO_darcs_get_data () { # {{{ - local darcsbase - - darcsbase=${vcs_comm[basedir]} - VCS_INFO_formats '' "${darcsbase:t}" "${darcsbase}" - return 0 -} diff --git a/zshfunc/vcs-info/VCS_INFO_detect_by_dir b/zshfunc/vcs-info/VCS_INFO_detect_by_dir deleted file mode 100644 index e0e7da3..0000000 --- a/zshfunc/vcs-info/VCS_INFO_detect_by_dir +++ /dev/null @@ -1,22 +0,0 @@ -VCS_INFO_detect_by_dir() { #{{{ - local dirname=$1 - local basedir="." realbasedir - - realbasedir="$(VCS_INFO_realpath ${basedir})" - while [[ ${realbasedir} != '/' ]]; do - if [[ -n ${vcs_comm[detect_need_file]} ]] ; then - [[ -d ${basedir}/${dirname} ]] && \ - [[ -e ${basedir}/${dirname}/${vcs_comm[detect_need_file]} ]] && \ - break - else - [[ -d ${basedir}/${dirname} ]] && break - fi - - basedir=${basedir}/.. - realbasedir="$(VCS_INFO_realpath ${basedir})" - done - - [[ ${realbasedir} == "/" ]] && return 1 - vcs_comm[basedir]=${realbasedir} - return 0 -} diff --git a/zshfunc/vcs-info/VCS_INFO_formats b/zshfunc/vcs-info/VCS_INFO_formats deleted file mode 100644 index b22d5aa..0000000 --- a/zshfunc/vcs-info/VCS_INFO_formats +++ /dev/null @@ -1,27 +0,0 @@ -VCS_INFO_formats () { # {{{ - setopt localoptions noksharrays - local action=$1 branch=$2 base=$3 - local msg - local -i i - - if [[ -n ${action} ]] ; then - zstyle -a ":vcs_info:${vcs}:${usercontext}" actionformats msgs - (( ${#msgs} < 1 )) && msgs[1]=' (%s)-[%b|%a]-' - else - zstyle -a ":vcs_info:${vcs}:${usercontext}" formats msgs - (( ${#msgs} < 1 )) && msgs[1]=' (%s)-[%b]-' - fi - - (( ${#msgs} > maxexports )) && msgs[$(( maxexports + 1 )),-1]=() - for i in {1..${#msgs}} ; do - zformat -f msg ${msgs[$i]} \ - a:${action} \ - b:${branch} \ - r:${base:t} \ - s:${vcs} \ - R:${base} \ - S:"$(VCS_INFO_reposub ${base})" - msgs[$i]=${msg} - done - return 0 -} diff --git a/zshfunc/vcs-info/VCS_INFO_git_detect b/zshfunc/vcs-info/VCS_INFO_git_detect deleted file mode 100644 index a57b276..0000000 --- a/zshfunc/vcs-info/VCS_INFO_git_detect +++ /dev/null @@ -1,9 +0,0 @@ -VCS_INFO_git_detect() { #{{{ - if VCS_INFO_check_com git && git rev-parse --is-inside-work-tree &> /dev/null ; then - vcs_comm[gitdir]="$(git rev-parse --git-dir 2> /dev/null)" || return 1 - if [[ -d ${vcs_comm[gitdir]}/svn ]] ; then vcs_comm[overwrite_name]='git-svn' - elif [[ -d ${vcs_comm[gitdir]}/refs/remotes/p4 ]] ; then vcs_comm[overwrite_name]='git-p4' ; fi - return 0 - fi - return 1 -} diff --git a/zshfunc/vcs-info/VCS_INFO_git_get_data b/zshfunc/vcs-info/VCS_INFO_git_get_data deleted file mode 100644 index ce73b5c..0000000 --- a/zshfunc/vcs-info/VCS_INFO_git_get_data +++ /dev/null @@ -1,17 +0,0 @@ -VCS_INFO_git_get_data () { # {{{ - setopt localoptions extendedglob - local gitdir gitbase gitbranch gitaction - - gitdir=${vcs_comm[gitdir]} - gitbranch="$(VCS_INFO_git_getbranch ${gitdir})" - - if [[ -z ${gitdir} ]] || [[ -z ${gitbranch} ]] ; then - return 1 - fi - - VCS_INFO_adjust - gitaction="$(VCS_INFO_git_getaction ${gitdir})" - gitbase=${PWD%/${$( git rev-parse --show-prefix )%/##}} - VCS_INFO_formats "${gitaction}" "${gitbranch}" "${gitbase}" - return 0 -} diff --git a/zshfunc/vcs-info/VCS_INFO_git_getaction b/zshfunc/vcs-info/VCS_INFO_git_getaction deleted file mode 100644 index 3593f28..0000000 --- a/zshfunc/vcs-info/VCS_INFO_git_getaction +++ /dev/null @@ -1,47 +0,0 @@ -VCS_INFO_git_getaction () { #{{{ - local gitaction='' gitdir=$1 - local tmp - - for tmp in "${gitdir}/rebase-apply" \ - "${gitdir}/rebase" \ - "${gitdir}/../.dotest" ; do - if [[ -d ${tmp} ]] ; then - if [[ -f "${tmp}/rebasing" ]] ; then - gitaction="rebase" - elif [[ -f "${tmp}/applying" ]] ; then - gitaction="am" - else - gitaction="am/rebase" - fi - printf '%s' ${gitaction} - return 0 - fi - done - - for tmp in "${gitdir}/rebase-merge/interactive" \ - "${gitdir}/.dotest-merge/interactive" ; do - if [[ -f "${tmp}" ]] ; then - printf '%s' "rebase-i" - return 0 - fi - done - - for tmp in "${gitdir}/rebase-merge" \ - "${gitdir}/.dotest-merge" ; do - if [[ -d "${tmp}" ]] ; then - printf '%s' "rebase-m" - return 0 - fi - done - - if [[ -f "${gitdir}/MERGE_HEAD" ]] ; then - printf '%s' "merge" - return 0 - fi - - if [[ -f "${gitdir}/BISECT_LOG" ]] ; then - printf '%s' "bisect" - return 0 - fi - return 1 -} diff --git a/zshfunc/vcs-info/VCS_INFO_git_getbranch b/zshfunc/vcs-info/VCS_INFO_git_getbranch deleted file mode 100644 index 03c5fa5..0000000 --- a/zshfunc/vcs-info/VCS_INFO_git_getbranch +++ /dev/null @@ -1,35 +0,0 @@ -VCS_INFO_git_getbranch () { #{{{ - local gitbranch gitdir=$1 - local gitsymref='git symbolic-ref HEAD' - - if [[ -d "${gitdir}/rebase-apply" ]] \ - || [[ -d "${gitdir}/rebase" ]] \ - || [[ -d "${gitdir}/../.dotest" ]] \ - || [[ -f "${gitdir}/MERGE_HEAD" ]] ; then - gitbranch="$(${(z)gitsymref} 2> /dev/null)" - [[ -z ${gitbranch} ]] && [[ -r ${gitdir}/rebase-apply/head-name ]] \ - && gitbranch="$(< ${gitdir}/rebase-apply/head-name)" - - elif [[ -f "${gitdir}/rebase-merge/interactive" ]] \ - || [[ -d "${gitdir}/rebase-merge" ]] ; then - gitbranch="$(< ${gitdir}/rebase-merge/head-name)" - - elif [[ -f "${gitdir}/.dotest-merge/interactive" ]] \ - || [[ -d "${gitdir}/.dotest-merge" ]] ; then - gitbranch="$(< ${gitdir}/.dotest-merge/head-name)" - - else - gitbranch="$(${(z)gitsymref} 2> /dev/null)" - - if [[ $? -ne 0 ]] ; then - gitbranch="$(git describe --exact-match HEAD 2>/dev/null)" - - if [[ $? -ne 0 ]] ; then - gitbranch="${${"$(< $gitdir/HEAD)"}[1,7]}..." - fi - fi - fi - - printf '%s' "${gitbranch##refs/heads/}" - return 0 -} diff --git a/zshfunc/vcs-info/VCS_INFO_hg_detect b/zshfunc/vcs-info/VCS_INFO_hg_detect deleted file mode 100644 index ea13422..0000000 --- a/zshfunc/vcs-info/VCS_INFO_hg_detect +++ /dev/null @@ -1,6 +0,0 @@ -VCS_INFO_hg_detect() { #{{{ - VCS_INFO_check_com hg || return 1 - vcs_comm[detect_need_file]=store - VCS_INFO_detect_by_dir '.hg' - return $? -} diff --git a/zshfunc/vcs-info/VCS_INFO_hg_get_data b/zshfunc/vcs-info/VCS_INFO_hg_get_data deleted file mode 100644 index 314d343..0000000 --- a/zshfunc/vcs-info/VCS_INFO_hg_get_data +++ /dev/null @@ -1,15 +0,0 @@ -VCS_INFO_hg_get_data () { # {{{ - local hgbranch hgbase file - - hgbase=${vcs_comm[basedir]} - - file="${hgbase}/.hg/branch" - if [[ -r ${file} ]] ; then - hgbranch=$(< ${file}) - else - hgbranch='default' - fi - - VCS_INFO_formats '' "${hgbranch}" "${hgbase}" - return 0 -} diff --git a/zshfunc/vcs-info/VCS_INFO_maxexports b/zshfunc/vcs-info/VCS_INFO_maxexports deleted file mode 100644 index c0b3c1f..0000000 --- a/zshfunc/vcs-info/VCS_INFO_maxexports +++ /dev/null @@ -1,8 +0,0 @@ -VCS_INFO_maxexports () { #{{{ - zstyle -s ":vcs_info:${vcs}:${usercontext}" "max-exports" maxexports || maxexports=2 - if [[ ${maxexports} != <-> ]] || (( maxexports < 1 )); then - printf 'vcs_info(): expecting numeric arg >= 1 for max-exports (got %s).\n' ${maxexports} - printf 'Defaulting to 2.\n' - maxexports=2 - fi -} diff --git a/zshfunc/vcs-info/VCS_INFO_mtn_detect b/zshfunc/vcs-info/VCS_INFO_mtn_detect deleted file mode 100644 index 91f019d..0000000 --- a/zshfunc/vcs-info/VCS_INFO_mtn_detect +++ /dev/null @@ -1,6 +0,0 @@ -VCS_INFO_mtn_detect() { #{{{ - VCS_INFO_check_com mtn || return 1 - vcs_comm[detect_need_file]=revision - VCS_INFO_detect_by_dir '_MTN' - return $? -} diff --git a/zshfunc/vcs-info/VCS_INFO_mtn_get_data b/zshfunc/vcs-info/VCS_INFO_mtn_get_data deleted file mode 100644 index 1edbb63..0000000 --- a/zshfunc/vcs-info/VCS_INFO_mtn_get_data +++ /dev/null @@ -1,8 +0,0 @@ -VCS_INFO_mtn_get_data () { # {{{ - local mtnbranch mtnbase - - mtnbase=${vcs_comm[basedir]} - mtnbranch=${${(M)${(f)"$( mtn status )"}:#(#s)Current branch:*}/*: /} - VCS_INFO_formats '' "${mtnbranch}" "${mtnbase}" - return 0 -} diff --git a/zshfunc/vcs-info/VCS_INFO_nvcsformats b/zshfunc/vcs-info/VCS_INFO_nvcsformats deleted file mode 100644 index eed0e32..0000000 --- a/zshfunc/vcs-info/VCS_INFO_nvcsformats +++ /dev/null @@ -1,11 +0,0 @@ -VCS_INFO_nvcsformats () { #{{{ - setopt localoptions noksharrays - local c v - - if [[ $1 == 'preinit' ]] ; then - c=default - v=preinit - fi - zstyle -a ":vcs_info:${v:-$vcs}:${c:-$usercontext}" nvcsformats msgs - (( ${#msgs} > maxexports )) && msgs[${maxexports},-1]=() -} diff --git a/zshfunc/vcs-info/VCS_INFO_realpath b/zshfunc/vcs-info/VCS_INFO_realpath deleted file mode 100644 index ba4a12a..0000000 --- a/zshfunc/vcs-info/VCS_INFO_realpath +++ /dev/null @@ -1,11 +0,0 @@ -VCS_INFO_realpath () { #{{{ - # a portable 'readlink -f' - # forcing a subshell, to ensure chpwd() is not removed - # from the calling shell (if VCS_INFO_realpath() is called - # manually). - ( - (( ${+functions[chpwd]} )) && unfunction chpwd - setopt chaselinks - cd $1 2>/dev/null && pwd - ) -} diff --git a/zshfunc/vcs-info/VCS_INFO_reposub b/zshfunc/vcs-info/VCS_INFO_reposub deleted file mode 100644 index 0eb81d4..0000000 --- a/zshfunc/vcs-info/VCS_INFO_reposub +++ /dev/null @@ -1,11 +0,0 @@ -VCS_INFO_reposub () { #{{{ - setopt localoptions extendedglob - local base=${1%%/##} - - [[ ${PWD} == ${base}/* ]] || { - printf '.' - return 1 - } - printf '%s' ${PWD#$base/} - return 0 -} diff --git a/zshfunc/vcs-info/VCS_INFO_set b/zshfunc/vcs-info/VCS_INFO_set deleted file mode 100644 index 4cd2999..0000000 --- a/zshfunc/vcs-info/VCS_INFO_set +++ /dev/null @@ -1,24 +0,0 @@ -VCS_INFO_set () { #{{{ - setopt localoptions noksharrays - local -i i j - - if [[ $1 == '--clear' ]] ; then - for i in {0..9} ; do - unset VCS_INFO_message_${i}_ - done - fi - if [[ $1 == '--nvcs' ]] ; then - [[ $2 == 'preinit' ]] && (( maxexports == 0 )) && (( maxexports = 1 )) - for i in {0..$((maxexports - 1))} ; do - typeset -gx VCS_INFO_message_${i}_= - done - VCS_INFO_nvcsformats $2 - fi - - (( ${#msgs} - 1 < 0 )) && return 0 - for i in {0..$(( ${#msgs} - 1 ))} ; do - (( j = i + 1 )) - typeset -gx VCS_INFO_message_${i}_=${msgs[$j]} - done - return 0 -} diff --git a/zshfunc/vcs-info/VCS_INFO_svk_detect b/zshfunc/vcs-info/VCS_INFO_svk_detect deleted file mode 100644 index 1bd4c7f..0000000 --- a/zshfunc/vcs-info/VCS_INFO_svk_detect +++ /dev/null @@ -1,34 +0,0 @@ -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 -} diff --git a/zshfunc/vcs-info/VCS_INFO_svk_get_data b/zshfunc/vcs-info/VCS_INFO_svk_get_data deleted file mode 100644 index 70d61b5..0000000 --- a/zshfunc/vcs-info/VCS_INFO_svk_get_data +++ /dev/null @@ -1,9 +0,0 @@ -VCS_INFO_svk_get_data () { # {{{ - local svkbranch svkbase - - svkbase=${vcs_comm[basedir]} - zstyle -s ":vcs_info:${vcs}:${usercontext}" branchformat svkbranch || svkbranch="%b:%r" - zformat -f svkbranch "${svkbranch}" "b:${vcs_comm[branch]}" "r:${vcs_comm[revision]}" - VCS_INFO_formats '' "${svkbranch}" "${svkbase}" - return 0 -} diff --git a/zshfunc/vcs-info/VCS_INFO_svn_detect b/zshfunc/vcs-info/VCS_INFO_svn_detect deleted file mode 100644 index 83595db..0000000 --- a/zshfunc/vcs-info/VCS_INFO_svn_detect +++ /dev/null @@ -1,5 +0,0 @@ -VCS_INFO_svn_detect() { #{{{ - VCS_INFO_check_com svn || return 1 - [[ -d ".svn" ]] && return 0 - return 1 -} diff --git a/zshfunc/vcs-info/VCS_INFO_svn_get_data b/zshfunc/vcs-info/VCS_INFO_svn_get_data deleted file mode 100644 index fccf016..0000000 --- a/zshfunc/vcs-info/VCS_INFO_svn_get_data +++ /dev/null @@ -1,17 +0,0 @@ -VCS_INFO_svn_get_data () { # {{{ - setopt localoptions noksharrays - local svnbase svnbranch - local -a svninfo - - svnbase="." - while [[ -d "${svnbase}/../.svn" ]]; do - svnbase="${svnbase}/.." - done - svnbase="$(VCS_INFO_realpath ${svnbase})" - svninfo=( ${${${(M)${(f)"$( svn info )"}:#(#s)(URL|Revision)*}/*: /}/*\//} ) - - zstyle -s ":vcs_info:${vcs}:${usercontext}" branchformat svnbranch || svnbranch="%b:%r" - zformat -f svnbranch "${svnbranch}" "b:${svninfo[1]}" "r:${svninfo[2]}" - VCS_INFO_formats '' "${svnbranch}" "${svnbase}" - return 0 -} diff --git a/zshfunc/vcs-info/VCS_INFO_tla_detect b/zshfunc/vcs-info/VCS_INFO_tla_detect deleted file mode 100644 index f91c96d..0000000 --- a/zshfunc/vcs-info/VCS_INFO_tla_detect +++ /dev/null @@ -1,5 +0,0 @@ -VCS_INFO_tla_detect() { #{{{ - VCS_INFO_check_com tla || return 1 - vcs_comm[basedir]="$(tla tree-root 2> /dev/null)" && return 0 - return 1 -} diff --git a/zshfunc/vcs-info/VCS_INFO_tla_get_data b/zshfunc/vcs-info/VCS_INFO_tla_get_data deleted file mode 100644 index 130ac77..0000000 --- a/zshfunc/vcs-info/VCS_INFO_tla_get_data +++ /dev/null @@ -1,9 +0,0 @@ -VCS_INFO_tla_get_data () { # {{{ - local tlabase tlabranch - - tlabase="$(VCS_INFO_realpath ${vcs_comm[basedir]})" - # tree-id gives us something like 'foo@example.com/demo--1.0--patch-4', so: - tlabranch=${${"$( tla tree-id )"}/*\//} - VCS_INFO_formats '' "${tlabranch}" "${tlabase}" - return 0 -} diff --git a/zshfunc/vcs-info/grml-vcs-info b/zshfunc/vcs-info/grml-vcs-info deleted file mode 100644 index a12f5bf..0000000 --- a/zshfunc/vcs-info/grml-vcs-info +++ /dev/null @@ -1,844 +0,0 @@ -# downloaded from http://git.grml.org/f/grml-etc-core/etc/zsh/zshrc -# Sat, 27 Jun 2009 12:20:18 +0200 -# -# buchered for cvs_info - -# Filename: /etc/zsh/zshrc -# Purpose: config file for zsh (z shell) -# Authors: grml-team (grml.org), (c) Michael Prokop -# Bug-Reports: see http://grml.org/bugs/ -# License: This file is licensed under the GPL v2. - - - -# The following code is imported from the file 'zsh/functions/vcs_info' -# from , -# which distributed under the same terms as zsh itself. - -# we will be using two variables, so let the code know now. -#zstyle ':vcs_info:*' max-exports 2 - -# vcs_info() documentation: -#{{{ -# REQUIREMENTS: -#{{{ -# This functionality requires zsh version >= 4.1.*. -#}}} -# -# LOADING: -#{{{ -# To load vcs_info(), copy this file to your $fpath[] and do: -# % autoload -Uz vcs_info && vcs_info -# -# To work, vcs_info() needs 'setopt prompt_subst' in your setup. -#}}} -# -# QUICKSTART: -#{{{ -# To get vcs_info() working quickly (including colors), you can do the -# following (assuming, you loaded vcs_info() properly - see above): -# -# % RED=$'%{\e[31m%}' -# % GR=$'%{\e[32m%}' -# % MA=$'%{\e[35m%}' -# % YE=$'%{\e[33m%}' -# % NC=$'%{\e[0m%}' -# -# % zstyle ':vcs_info:*' actionformats \ -# "${MA}(${NC}%s${MA})${YE}-${MA}[${GR}%b${YE}|${RED}%a${MA}]${NC} " -# -# % zstyle ':vcs_info:*' formats \ -# "${MA}(${NC}%s${MA})${Y}-${MA}[${GR}%b${MA}]${NC}%} " -# -# % zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat "%b${RED}:${YE}%r" -# -# % precmd () { vcs_info } -# % PS1='${MA}[${GR}%n${MA}] ${MA}(${RED}%!${MA}) ${YE}%3~ ${VCS_INFO_message_0_}${NC}%# ' -# -# Obviously, the las two lines are there for demonstration: You need to -# call vcs_info() from your precmd() function (see 'SPECIAL FUNCTIONS' in -# 'man zshmisc'). Once that is done you need a *single* quoted -# '${VCS_INFO_message_0_}' in your prompt. -# -# Now call the 'vcs_info_printsys' utility from the command line: -# -# % vcs_info_printsys -# # list of supported version control backends: -# # disabled systems are prefixed by a hash sign (#) -# git -# hg -# bzr -# darcs -# svk -# mtn -# svn -# cvs -# cdv -# tla -# # flavours (cannot be used in the disable style; they -# # are disabled with their master [git-svn -> git]): -# git-p4 -# git-svn -# -# Ten version control backends as you can see. You may not want all -# of these. Because there is no point in running the code to detect -# systems you do not use. ever. So, there is a way to disable some -# backends altogether: -# -# % zstyle ':vcs_info:*' disable bzr cdv darcs mtn svk tla -# -# If you rerun 'vcs_info_printsys' now, you will see the backends listed -# in the 'disable' style marked as diabled by a hash sign. That means the -# detection of these systems is skipped *completely*. No wasted time there. -# -# For more control, read the reference below. -#}}} -# -# CONFIGURATION: -#{{{ -# The vcs_info() feature can be configured via zstyle. -# -# First, the context in which we are working: -# :vcs_info:: -# -# ...where is one of: -# - git, git-svn, git-p4, hg, darcs, bzr, cdv, mtn, svn, cvs, svk or tla. -# -# ...and is a freely configurable string, assignable by the -# user as the first argument to vcs_info() (see its description below). -# -# There is are three special values for : The first is named -# 'init', that is in effect as long as there was no decision what vcs -# backend to use. The second is 'preinit; it is used *before* vcs_info() -# is run, when initializing the data exporting variables. The third -# special value is 'formats' and is used by the 'vcs_info_lastmsg' for -# looking up its styles. -# -# There are two pre-defined values for : -# default - the one used if none is specified -# command - used by vcs_info_lastmsg to lookup its styles. -# -# You may *not* use 'print_systems_' as a user-context string, because it -# is used internally. -# -# You can of course use ':vcs_info:*' to match all VCSs in all -# user-contexts at once. -# -# Another special context is 'formats', which is used by the -# vcs_info_lastmsg() utility function (see below). -# -# -# This is a description of all styles, that are looked up: -# formats - A list of formats, used when actionformats is not -# used (which is most of the time). -# actionformats - A list of formats, used if a there is a special -# action going on in your current repository; -# (like an interactive rebase or a merge conflict) -# branchformat - Some backends replace %b in the formats and -# actionformats styles above, not only by a branch -# name but also by a revision number. This style -# let's you modify how that string should look like. -# nvcsformats - These "formats" are exported, when we didn't detect -# a version control system for the current directory. -# This is useful, if you want vcs_info() to completely -# take over the generation of your prompt. -# You would do something like -# PS1='${VCS_INFO_message_0_}' -# to accomplish that. -# max-exports - Defines the maximum number if VCS_INFO_message_*_ -# variables vcs_info() will export. -# enable - Checked in the 'init' context. If set to false, -# vcs_info() will do nothing. -# disable - Provide a list of systems, you don't want -# the vcs_info() to check for repositories -# (checked in the 'init' context, too). -# disable-patterns - A list of patterns that are checked against $PWD. -# If the pattern matches, vcs_info will be disabled. -# Say, ~/.zsh is a directory under version control, -# in which you do not want vcs_info to be active, do: -# zstyle ':vcs_info:*' disable-patterns "$HOME/.zsh+(|/*)" -# use-simple - If there are two different ways of gathering -# information, you can select the simpler one -# by setting this style to true; the default -# is to use the not-that-simple code, which is -# potentially a lot slower but might be more -# accurate in all possible cases. -# use-prompt-escapes - determines if we assume that the assembled -# string from vcs_info() includes prompt escapes. -# (Used by vcs_info_lastmsg(). -# -# The use-simple style is only available for the bzr backend. -# -# The default values for these in all contexts are: -# formats " (%s)-[%b|%a]-" -# actionformats " (%s)-[%b]-" -# branchformat "%b:%r" (for bzr, svn and svk) -# nvcsformats "" -# max-exports 2 -# enable true -# disable (empty list) -# disable-patterns (empty list) -# use-simple false -# use-prompt-escapes true -# -# -# In normal formats and actionformats, the following replacements -# are done: -# %s - The vcs in use (git, hg, svn etc.) -# %b - Information about the current branch. -# %a - An identifier, that describes the action. -# Only makes sense in actionformats. -# %R - base directory of the repository. -# %r - repository name -# If %R is '/foo/bar/repoXY', %r is 'repoXY'. -# %S - subdirectory within a repository. if $PWD is -# '/foo/bar/reposXY/beer/tasty', %S is 'beer/tasty'. -# -# -# In branchformat these replacements are done: -# %b - the branch name -# %r - the current revision number -# -# Not all vcs backends have to support all replacements. -# nvcsformat does not perform *any* replacements. It is just a string. -#}}} -# -# ODDITIES: -#{{{ -# If you want to use the %b (bold off) prompt expansion in 'formats', which -# expands %b itself, use %%b. That will cause the vcs_info() expansion to -# replace %%b with %b. So zsh's prompt expansion mechanism can handle it. -# Similarly, to hand down %b from branchformat, use %%%%b. Sorry for this -# inconvenience, but it cannot be easily avoided. Luckily we do not clash -# with a lot of prompt expansions and this only needs to be done for those. -# See 'man zshmisc' for details about EXPANSION OF PROMPT SEQUENCES. -#}}} -# -# FUNCTION DESCRIPTIONS (public API): -#{{{ -# vcs_info() -# The main function, that runs all backends and assembles -# all data into ${VCS_INFO_message_*_}. This is the function -# you want to call from precmd() if you want to include -# up-to-date information in your prompt (see VARIABLE -# DESCRIPTION below). -# -# vcs_info_printsys() -# Prints a list of all supported version control systems. -# Useful to find out possible contexts (and which of them are enabled) -# or values for the 'disable' style. -# -# vcs_info_lastmsg() -# Outputs the last ${VCS_INFO_message_*_} value. Takes into account -# the value of the use-prompt-escapes style in ':vcs_info:formats'. -# It also only prints max-exports values. -# -# All functions named VCS_INFO_* are for internal use only. -#}}} -# -# VARIABLE DESCRIPTION: -#{{{ -# ${VCS_INFO_message_N_} (Note the trailing underscore) -# Where 'N' is an integer, eg: VCS_INFO_message_0_ -# These variables are the storage for the informational message the -# last vcs_info() call has assembled. These are strongly connected -# to the formats, actionformats and nvcsformats styles described -# above. Those styles are lists. the first member of that list gets -# expanded into ${VCS_INFO_message_0_}, the second into -# ${VCS_INFO_message_1_} and the Nth into ${VCS_INFO_message_N-1_}. -# These parameters are exported into the environment. -# (See the max-exports style above.) -#}}} -# -# EXAMPLES: -#{{{ -# Don't use vcs_info at all (even though it's in your prompt): -# % zstyle ':vcs_info:*' enable false -# -# Disable the backends for bzr and svk: -# % zstyle ':vcs_info:*' disable bzr svk -# -# Provide a special formats for git: -# % zstyle ':vcs_info:git:*' formats ' GIT, BABY! [%b]' -# % zstyle ':vcs_info:git:*' actionformats ' GIT ACTION! [%b|%a]' -# -# Use the quicker bzr backend (if you do, please report if it does -# the-right-thing[tm] - thanks): -# % zstyle ':vcs_info:bzr:*' use-simple true -# -# Display the revision number in yellow for bzr and svn: -# % zstyle ':vcs_info:(svn|bzr):*' branchformat '%b%{'${fg[yellow]}'%}:%r' -# -# If you want colors, make sure you enclose the color codes in %{...%}, -# if you want to use the string provided by vcs_info() in prompts. -# -# Here is how to print the vcs infomation as a command: -# % alias vcsi='vcs_info command; vcs_info_lastmsg' -# -# This way, you can even define different formats for output via -# vcs_info_lastmsg() in the ':vcs_info:command:*' namespace. -#}}} -#}}} -# utilities -VCS_INFO_adjust () { #{{{ - [[ -n ${vcs_comm[overwrite_name]} ]] && vcs=${vcs_comm[overwrite_name]} - return 0 -} -# }}} -VCS_INFO_check_com () { #{{{ - (( ${+commands[$1]} )) && [[ -x ${commands[$1]} ]] && return 0 - return 1 -} -# }}} -VCS_INFO_formats () { # {{{ - setopt localoptions noksharrays - local action=$1 branch=$2 base=$3 - local msg - local -i i - - if [[ -n ${action} ]] ; then - zstyle -a ":vcs_info:${vcs}:${usercontext}" actionformats msgs - (( ${#msgs} < 1 )) && msgs[1]=' (%s)-[%b|%a]-' - else - zstyle -a ":vcs_info:${vcs}:${usercontext}" formats msgs - (( ${#msgs} < 1 )) && msgs[1]=' (%s)-[%b]-' - fi - - (( ${#msgs} > maxexports )) && msgs[$(( maxexports + 1 )),-1]=() - for i in {1..${#msgs}} ; do - zformat -f msg ${msgs[$i]} \ - a:${action} \ - b:${branch} \ - r:${base:t} \ - s:${vcs} \ - R:${base} \ - S:"$(VCS_INFO_reposub ${base})" - msgs[$i]=${msg} - done - return 0 -} -# }}} -VCS_INFO_maxexports () { #{{{ - zstyle -s ":vcs_info:${vcs}:${usercontext}" "max-exports" maxexports || maxexports=2 - if [[ ${maxexports} != <-> ]] || (( maxexports < 1 )); then - printf 'vcs_info(): expecting numeric arg >= 1 for max-exports (got %s).\n' ${maxexports} - printf 'Defaulting to 2.\n' - maxexports=2 - fi -} -# }}} -VCS_INFO_nvcsformats () { #{{{ - setopt localoptions noksharrays - local c v - - if [[ $1 == 'preinit' ]] ; then - c=default - v=preinit - fi - zstyle -a ":vcs_info:${v:-$vcs}:${c:-$usercontext}" nvcsformats msgs - (( ${#msgs} > maxexports )) && msgs[${maxexports},-1]=() -} -# }}} -VCS_INFO_realpath () { #{{{ - # a portable 'readlink -f' - # forcing a subshell, to ensure chpwd() is not removed - # from the calling shell (if VCS_INFO_realpath() is called - # manually). - ( - (( ${+functions[chpwd]} )) && unfunction chpwd - setopt chaselinks - cd $1 2>/dev/null && pwd - ) -} -# }}} -VCS_INFO_reposub () { #{{{ - setopt localoptions extendedglob - local base=${1%%/##} - - [[ ${PWD} == ${base}/* ]] || { - printf '.' - return 1 - } - printf '%s' ${PWD#$base/} - return 0 -} -# }}} -VCS_INFO_set () { #{{{ - setopt localoptions noksharrays - local -i i j - - if [[ $1 == '--clear' ]] ; then - for i in {0..9} ; do - unset VCS_INFO_message_${i}_ - done - fi - if [[ $1 == '--nvcs' ]] ; then - [[ $2 == 'preinit' ]] && (( maxexports == 0 )) && (( maxexports = 1 )) - for i in {0..$((maxexports - 1))} ; do - typeset -gx VCS_INFO_message_${i}_= - done - VCS_INFO_nvcsformats $2 - fi - - (( ${#msgs} - 1 < 0 )) && return 0 - for i in {0..$(( ${#msgs} - 1 ))} ; do - (( j = i + 1 )) - typeset -gx VCS_INFO_message_${i}_=${msgs[$j]} - done - return 0 -} -# }}} -# information gathering -VCS_INFO_bzr_get_data () { # {{{ - setopt localoptions noksharrays - local bzrbase bzrbr - local -a bzrinfo - - if zstyle -t ":vcs_info:${vcs}:${usercontext}" "use-simple" ; then - bzrbase=${vcs_comm[basedir]} - bzrinfo[2]=${bzrbase:t} - if [[ -f ${bzrbase}/.bzr/branch/last-revision ]] ; then - bzrinfo[1]=$(< ${bzrbase}/.bzr/branch/last-revision) - bzrinfo[1]=${${bzrinfo[1]}%% *} - fi - else - bzrbase=${${(M)${(f)"$( bzr info )"}:# ##branch\ root:*}/*: ##/} - bzrinfo=( ${${${(M)${(f)"$( bzr version-info )"}:#(#s)(revno|branch-nick)*}/*: /}/*\//} ) - bzrbase="$(VCS_INFO_realpath ${bzrbase})" - fi - - zstyle -s ":vcs_info:${vcs}:${usercontext}" branchformat bzrbr || bzrbr="%b:%r" - zformat -f bzrbr "${bzrbr}" "b:${bzrinfo[2]}" "r:${bzrinfo[1]}" - VCS_INFO_formats '' "${bzrbr}" "${bzrbase}" - return 0 -} -# }}} -VCS_INFO_cdv_get_data () { # {{{ - local cdvbase - - cdvbase=${vcs_comm[basedir]} - VCS_INFO_formats '' "${cdvbase:t}" "${cdvbase}" - return 0 -} -# }}} -VCS_INFO_cvs_get_data () { # {{{ - local cvsbranch cvsbase basename - - cvsbase="." - while [[ -d "${cvsbase}/../CVS" ]]; do - cvsbase="${cvsbase}/.." - done - cvsbase="$(VCS_INFO_realpath ${cvsbase})" - cvsbranch=$(< ./CVS/Repository) - basename=${cvsbase:t} - cvsbranch=${cvsbranch##${basename}/} - [[ -z ${cvsbranch} ]] && cvsbranch=${basename} - VCS_INFO_formats '' "${cvsbranch}" "${cvsbase}" - return 0 -} -# }}} -VCS_INFO_darcs_get_data () { # {{{ - local darcsbase - - darcsbase=${vcs_comm[basedir]} - VCS_INFO_formats '' "${darcsbase:t}" "${darcsbase}" - return 0 -} -# }}} -VCS_INFO_git_getaction () { #{{{ - local gitaction='' gitdir=$1 - local tmp - - for tmp in "${gitdir}/rebase-apply" \ - "${gitdir}/rebase" \ - "${gitdir}/../.dotest" ; do - if [[ -d ${tmp} ]] ; then - if [[ -f "${tmp}/rebasing" ]] ; then - gitaction="rebase" - elif [[ -f "${tmp}/applying" ]] ; then - gitaction="am" - else - gitaction="am/rebase" - fi - printf '%s' ${gitaction} - return 0 - fi - done - - for tmp in "${gitdir}/rebase-merge/interactive" \ - "${gitdir}/.dotest-merge/interactive" ; do - if [[ -f "${tmp}" ]] ; then - printf '%s' "rebase-i" - return 0 - fi - done - - for tmp in "${gitdir}/rebase-merge" \ - "${gitdir}/.dotest-merge" ; do - if [[ -d "${tmp}" ]] ; then - printf '%s' "rebase-m" - return 0 - fi - done - - if [[ -f "${gitdir}/MERGE_HEAD" ]] ; then - printf '%s' "merge" - return 0 - fi - - if [[ -f "${gitdir}/BISECT_LOG" ]] ; then - printf '%s' "bisect" - return 0 - fi - return 1 -} -# }}} -VCS_INFO_git_getbranch () { #{{{ - local gitbranch gitdir=$1 - local gitsymref='git symbolic-ref HEAD' - - if [[ -d "${gitdir}/rebase-apply" ]] \ - || [[ -d "${gitdir}/rebase" ]] \ - || [[ -d "${gitdir}/../.dotest" ]] \ - || [[ -f "${gitdir}/MERGE_HEAD" ]] ; then - gitbranch="$(${(z)gitsymref} 2> /dev/null)" - [[ -z ${gitbranch} ]] && [[ -r ${gitdir}/rebase-apply/head-name ]] \ - && gitbranch="$(< ${gitdir}/rebase-apply/head-name)" - - elif [[ -f "${gitdir}/rebase-merge/interactive" ]] \ - || [[ -d "${gitdir}/rebase-merge" ]] ; then - gitbranch="$(< ${gitdir}/rebase-merge/head-name)" - - elif [[ -f "${gitdir}/.dotest-merge/interactive" ]] \ - || [[ -d "${gitdir}/.dotest-merge" ]] ; then - gitbranch="$(< ${gitdir}/.dotest-merge/head-name)" - - else - gitbranch="$(${(z)gitsymref} 2> /dev/null)" - - if [[ $? -ne 0 ]] ; then - gitbranch="$(git describe --exact-match HEAD 2>/dev/null)" - - if [[ $? -ne 0 ]] ; then - gitbranch="${${"$(< $gitdir/HEAD)"}[1,7]}..." - fi - fi - fi - - printf '%s' "${gitbranch##refs/heads/}" - return 0 -} -# }}} -VCS_INFO_git_get_data () { # {{{ - setopt localoptions extendedglob - local gitdir gitbase gitbranch gitaction - - gitdir=${vcs_comm[gitdir]} - gitbranch="$(VCS_INFO_git_getbranch ${gitdir})" - - if [[ -z ${gitdir} ]] || [[ -z ${gitbranch} ]] ; then - return 1 - fi - - VCS_INFO_adjust - gitaction="$(VCS_INFO_git_getaction ${gitdir})" - gitbase=${PWD%/${$( git rev-parse --show-prefix )%/##}} - VCS_INFO_formats "${gitaction}" "${gitbranch}" "${gitbase}" - return 0 -} -# }}} -VCS_INFO_hg_get_data () { # {{{ - local hgbranch hgbase file - - hgbase=${vcs_comm[basedir]} - - file="${hgbase}/.hg/branch" - if [[ -r ${file} ]] ; then - hgbranch=$(< ${file}) - else - hgbranch='default' - fi - - VCS_INFO_formats '' "${hgbranch}" "${hgbase}" - return 0 -} -# }}} -VCS_INFO_mtn_get_data () { # {{{ - local mtnbranch mtnbase - - mtnbase=${vcs_comm[basedir]} - mtnbranch=${${(M)${(f)"$( mtn status )"}:#(#s)Current branch:*}/*: /} - VCS_INFO_formats '' "${mtnbranch}" "${mtnbase}" - return 0 -} -# }}} -VCS_INFO_svk_get_data () { # {{{ - local svkbranch svkbase - - svkbase=${vcs_comm[basedir]} - zstyle -s ":vcs_info:${vcs}:${usercontext}" branchformat svkbranch || svkbranch="%b:%r" - zformat -f svkbranch "${svkbranch}" "b:${vcs_comm[branch]}" "r:${vcs_comm[revision]}" - VCS_INFO_formats '' "${svkbranch}" "${svkbase}" - return 0 -} -# }}} -VCS_INFO_svn_get_data () { # {{{ - setopt localoptions noksharrays - local svnbase svnbranch - local -a svninfo - - svnbase="." - while [[ -d "${svnbase}/../.svn" ]]; do - svnbase="${svnbase}/.." - done - svnbase="$(VCS_INFO_realpath ${svnbase})" - svninfo=( ${${${(M)${(f)"$( svn info )"}:#(#s)(URL|Revision)*}/*: /}/*\//} ) - - zstyle -s ":vcs_info:${vcs}:${usercontext}" branchformat svnbranch || svnbranch="%b:%r" - zformat -f svnbranch "${svnbranch}" "b:${svninfo[1]}" "r:${svninfo[2]}" - VCS_INFO_formats '' "${svnbranch}" "${svnbase}" - return 0 -} -# }}} -VCS_INFO_tla_get_data () { # {{{ - local tlabase tlabranch - - tlabase="$(VCS_INFO_realpath ${vcs_comm[basedir]})" - # tree-id gives us something like 'foo@example.com/demo--1.0--patch-4', so: - tlabranch=${${"$( tla tree-id )"}/*\//} - VCS_INFO_formats '' "${tlabranch}" "${tlabase}" - return 0 -} -# }}} -# detection -VCS_INFO_detect_by_dir() { #{{{ - local dirname=$1 - local basedir="." realbasedir - - realbasedir="$(VCS_INFO_realpath ${basedir})" - while [[ ${realbasedir} != '/' ]]; do - if [[ -n ${vcs_comm[detect_need_file]} ]] ; then - [[ -d ${basedir}/${dirname} ]] && \ - [[ -e ${basedir}/${dirname}/${vcs_comm[detect_need_file]} ]] && \ - break - else - [[ -d ${basedir}/${dirname} ]] && break - fi - - basedir=${basedir}/.. - realbasedir="$(VCS_INFO_realpath ${basedir})" - done - - [[ ${realbasedir} == "/" ]] && return 1 - vcs_comm[basedir]=${realbasedir} - return 0 -} -# }}} -VCS_INFO_bzr_detect() { #{{{ - VCS_INFO_check_com bzr || return 1 - vcs_comm[detect_need_file]=branch/format - VCS_INFO_detect_by_dir '.bzr' - return $? -} -# }}} -VCS_INFO_cdv_detect() { #{{{ - VCS_INFO_check_com cdv || return 1 - vcs_comm[detect_need_file]=format - VCS_INFO_detect_by_dir '.cdv' - return $? -} -# }}} -VCS_INFO_cvs_detect() { #{{{ - VCS_INFO_check_com svn || return 1 - [[ -d "./CVS" ]] && [[ -r "./CVS/Repository" ]] && return 0 - return 1 -} -# }}} -VCS_INFO_darcs_detect() { #{{{ - VCS_INFO_check_com darcs || return 1 - vcs_comm[detect_need_file]=format - VCS_INFO_detect_by_dir '_darcs' - return $? -} -# }}} -VCS_INFO_git_detect() { #{{{ - if VCS_INFO_check_com git && git rev-parse --is-inside-work-tree &> /dev/null ; then - vcs_comm[gitdir]="$(git rev-parse --git-dir 2> /dev/null)" || return 1 - if [[ -d ${vcs_comm[gitdir]}/svn ]] ; then vcs_comm[overwrite_name]='git-svn' - elif [[ -d ${vcs_comm[gitdir]}/refs/remotes/p4 ]] ; then vcs_comm[overwrite_name]='git-p4' ; fi - return 0 - fi - return 1 -} -# }}} -VCS_INFO_hg_detect() { #{{{ - VCS_INFO_check_com hg || return 1 - vcs_comm[detect_need_file]=store - VCS_INFO_detect_by_dir '.hg' - return $? -} -# }}} -VCS_INFO_mtn_detect() { #{{{ - VCS_INFO_check_com mtn || return 1 - vcs_comm[detect_need_file]=revision - VCS_INFO_detect_by_dir '_MTN' - return $? -} -# }}} -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 -} -# }}} -VCS_INFO_svn_detect() { #{{{ - VCS_INFO_check_com svn || return 1 - [[ -d ".svn" ]] && return 0 - return 1 -} -# }}} -VCS_INFO_tla_detect() { #{{{ - VCS_INFO_check_com tla || return 1 - vcs_comm[basedir]="$(tla tree-root 2> /dev/null)" && return 0 - return 1 -} -# }}} -# public API -vcs_info_printsys () { # {{{ - vcs_info print_systems_ -} -# }}} -vcs_info_lastmsg () { # {{{ - local -i i - - VCS_INFO_maxexports - for i in {0..$((maxexports - 1))} ; do - printf '$VCS_INFO_message_%d_: "' $i - if zstyle -T ':vcs_info:formats:command' use-prompt-escapes ; then - print -nP ${(P)${:-VCS_INFO_message_${i}_}} - else - print -n ${(P)${:-VCS_INFO_message_${i}_}} - fi - printf '"\n' - done -} -# }}} -vcs_info () { # {{{ - local pat - local -i found - local -a VCSs disabled dps - local -x vcs usercontext - local -ix maxexports - local -ax msgs - local -Ax vcs_comm - - vcs="init" - VCSs=(git hg bzr darcs svk mtn svn cvs cdv tla) - case $1 in - (print_systems_) - zstyle -a ":vcs_info:${vcs}:${usercontext}" "disable" disabled - print -l '# list of supported version control backends:' \ - '# disabled systems are prefixed by a hash sign (#)' - for vcs in ${VCSs} ; do - [[ -n ${(M)disabled:#${vcs}} ]] && printf '#' - printf '%s\n' ${vcs} - done - print -l '# flavours (cannot be used in the disable style; they' \ - '# are disabled with their master [git-svn -> git]):' \ - git-{p4,svn} - return 0 - ;; - ('') - [[ -z ${usercontext} ]] && usercontext=default - ;; - (*) [[ -z ${usercontext} ]] && usercontext=$1 - ;; - esac - - zstyle -T ":vcs_info:${vcs}:${usercontext}" "enable" || { - [[ -n ${VCS_INFO_message_0_} ]] && VCS_INFO_set --clear - return 0 - } - zstyle -a ":vcs_info:${vcs}:${usercontext}" "disable" disabled - - zstyle -a ":vcs_info:${vcs}:${usercontext}" "disable-patterns" dps - for pat in ${dps} ; do - if [[ ${PWD} == ${~pat} ]] ; then - [[ -n ${vcs_info_msg_0_} ]] && VCS_INFO_set --clear - return 0 - fi - done - - VCS_INFO_maxexports - - (( found = 0 )) - for vcs in ${VCSs} ; do - [[ -n ${(M)disabled:#${vcs}} ]] && continue - vcs_comm=() - VCS_INFO_${vcs}_detect && (( found = 1 )) && break - done - - (( found == 0 )) && { - VCS_INFO_set --nvcs - return 0 - } - - VCS_INFO_${vcs}_get_data || { - VCS_INFO_set --nvcs - return 1 - } - - VCS_INFO_set - return 0 -} - -#VCS_INFO_set --nvcs preinit -# }}} - -# Change vcs_info formats for the grml prompt. The 2nd format sets up -# $vcs_info_msg_1_ to contain "zsh: repo-name" used to set our screen title. -# TODO: The included vcs_info() version still uses $VCS_INFO_message_N_. -# That needs to be the use of $VCS_INFO_message_N_ needs to be changed -# to $vcs_info_msg_N_ as soon as we use the included version. -#if [[ "$TERM" == dumb ]] ; then -# zstyle ':vcs_info:*' actionformats "(%s%)-[%b|%a] " "zsh: %r" -# zstyle ':vcs_info:*' formats "(%s%)-[%b] " "zsh: %r" -#else -# # these are the same, just with a lot of colours: -# zstyle ':vcs_info:*' actionformats "${MAGENTA}(${NO_COLOUR}%s${MAGENTA})${YELLOW}-${MAGENTA}[${GREEN}%b${YELLOW}|${RED}%a${MAGENTA}]${NO_COLOUR} " \ -# "zsh: %r" -# zstyle ':vcs_info:*' formats "${MAGENTA}(${NO_COLOUR}%s${MAGENTA})${YELLOW}-${MAGENTA}[${GREEN}%b${MAGENTA}]${NO_COLOUR}%} " \ -# "zsh: %r" -# zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat "%b${RED}:${YELLOW}%r" -#fi - -# }}} diff --git a/zshfunc/vcs-info/vcs_info b/zshfunc/vcs-info/vcs_info deleted file mode 100644 index 1a90aa6..0000000 --- a/zshfunc/vcs-info/vcs_info +++ /dev/null @@ -1,68 +0,0 @@ -vcs_info () { # {{{ - local pat - local -i found - local -a VCSs disabled dps - local -x vcs usercontext - local -ix maxexports - local -ax msgs - local -Ax vcs_comm - - vcs="init" - VCSs=(git hg bzr darcs svk mtn svn cvs cdv tla) - case $1 in - (print_systems_) - zstyle -a ":vcs_info:${vcs}:${usercontext}" "disable" disabled - print -l '# list of supported version control backends:' \ - '# disabled systems are prefixed by a hash sign (#)' - for vcs in ${VCSs} ; do - [[ -n ${(M)disabled:#${vcs}} ]] && printf '#' - printf '%s\n' ${vcs} - done - print -l '# flavours (cannot be used in the disable style; they' \ - '# are disabled with their master [git-svn -> git]):' \ - git-{p4,svn} - return 0 - ;; - ('') - [[ -z ${usercontext} ]] && usercontext=default - ;; - (*) [[ -z ${usercontext} ]] && usercontext=$1 - ;; - esac - - zstyle -T ":vcs_info:${vcs}:${usercontext}" "enable" || { - [[ -n ${VCS_INFO_message_0_} ]] && VCS_INFO_set --clear - return 0 - } - zstyle -a ":vcs_info:${vcs}:${usercontext}" "disable" disabled - - zstyle -a ":vcs_info:${vcs}:${usercontext}" "disable-patterns" dps - for pat in ${dps} ; do - if [[ ${PWD} == ${~pat} ]] ; then - [[ -n ${vcs_info_msg_0_} ]] && VCS_INFO_set --clear - return 0 - fi - done - - VCS_INFO_maxexports - - (( found = 0 )) - for vcs in ${VCSs} ; do - [[ -n ${(M)disabled:#${vcs}} ]] && continue - vcs_comm=() - VCS_INFO_${vcs}_detect && (( found = 1 )) && break - done - - (( found == 0 )) && { - VCS_INFO_set --nvcs - return 0 - } - - VCS_INFO_${vcs}_get_data || { - VCS_INFO_set --nvcs - return 1 - } - - VCS_INFO_set - return 0 -} diff --git a/zshfunc/vcs-info/vcs_info_lastmsg b/zshfunc/vcs-info/vcs_info_lastmsg deleted file mode 100644 index 6e00ddc..0000000 --- a/zshfunc/vcs-info/vcs_info_lastmsg +++ /dev/null @@ -1,14 +0,0 @@ -vcs_info_lastmsg () { # {{{ - local -i i - - VCS_INFO_maxexports - for i in {0..$((maxexports - 1))} ; do - printf '$VCS_INFO_message_%d_: "' $i - if zstyle -T ':vcs_info:formats:command' use-prompt-escapes ; then - print -nP ${(P)${:-VCS_INFO_message_${i}_}} - else - print -n ${(P)${:-VCS_INFO_message_${i}_}} - fi - printf '"\n' - done -} diff --git a/zshfunc/vcs-info/vcs_info_printsys b/zshfunc/vcs-info/vcs_info_printsys deleted file mode 100644 index c585393..0000000 --- a/zshfunc/vcs-info/vcs_info_printsys +++ /dev/null @@ -1,3 +0,0 @@ -vcs_info_printsys () { # {{{ - vcs_info print_systems_ -} diff --git a/zshfunc/vcs_info b/zshfunc/vcs_info new file mode 100644 index 0000000..a12f5bf --- /dev/null +++ b/zshfunc/vcs_info @@ -0,0 +1,844 @@ +# downloaded from http://git.grml.org/f/grml-etc-core/etc/zsh/zshrc +# Sat, 27 Jun 2009 12:20:18 +0200 +# +# buchered for cvs_info + +# Filename: /etc/zsh/zshrc +# Purpose: config file for zsh (z shell) +# Authors: grml-team (grml.org), (c) Michael Prokop +# Bug-Reports: see http://grml.org/bugs/ +# License: This file is licensed under the GPL v2. + + + +# The following code is imported from the file 'zsh/functions/vcs_info' +# from , +# which distributed under the same terms as zsh itself. + +# we will be using two variables, so let the code know now. +#zstyle ':vcs_info:*' max-exports 2 + +# vcs_info() documentation: +#{{{ +# REQUIREMENTS: +#{{{ +# This functionality requires zsh version >= 4.1.*. +#}}} +# +# LOADING: +#{{{ +# To load vcs_info(), copy this file to your $fpath[] and do: +# % autoload -Uz vcs_info && vcs_info +# +# To work, vcs_info() needs 'setopt prompt_subst' in your setup. +#}}} +# +# QUICKSTART: +#{{{ +# To get vcs_info() working quickly (including colors), you can do the +# following (assuming, you loaded vcs_info() properly - see above): +# +# % RED=$'%{\e[31m%}' +# % GR=$'%{\e[32m%}' +# % MA=$'%{\e[35m%}' +# % YE=$'%{\e[33m%}' +# % NC=$'%{\e[0m%}' +# +# % zstyle ':vcs_info:*' actionformats \ +# "${MA}(${NC}%s${MA})${YE}-${MA}[${GR}%b${YE}|${RED}%a${MA}]${NC} " +# +# % zstyle ':vcs_info:*' formats \ +# "${MA}(${NC}%s${MA})${Y}-${MA}[${GR}%b${MA}]${NC}%} " +# +# % zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat "%b${RED}:${YE}%r" +# +# % precmd () { vcs_info } +# % PS1='${MA}[${GR}%n${MA}] ${MA}(${RED}%!${MA}) ${YE}%3~ ${VCS_INFO_message_0_}${NC}%# ' +# +# Obviously, the las two lines are there for demonstration: You need to +# call vcs_info() from your precmd() function (see 'SPECIAL FUNCTIONS' in +# 'man zshmisc'). Once that is done you need a *single* quoted +# '${VCS_INFO_message_0_}' in your prompt. +# +# Now call the 'vcs_info_printsys' utility from the command line: +# +# % vcs_info_printsys +# # list of supported version control backends: +# # disabled systems are prefixed by a hash sign (#) +# git +# hg +# bzr +# darcs +# svk +# mtn +# svn +# cvs +# cdv +# tla +# # flavours (cannot be used in the disable style; they +# # are disabled with their master [git-svn -> git]): +# git-p4 +# git-svn +# +# Ten version control backends as you can see. You may not want all +# of these. Because there is no point in running the code to detect +# systems you do not use. ever. So, there is a way to disable some +# backends altogether: +# +# % zstyle ':vcs_info:*' disable bzr cdv darcs mtn svk tla +# +# If you rerun 'vcs_info_printsys' now, you will see the backends listed +# in the 'disable' style marked as diabled by a hash sign. That means the +# detection of these systems is skipped *completely*. No wasted time there. +# +# For more control, read the reference below. +#}}} +# +# CONFIGURATION: +#{{{ +# The vcs_info() feature can be configured via zstyle. +# +# First, the context in which we are working: +# :vcs_info:: +# +# ...where is one of: +# - git, git-svn, git-p4, hg, darcs, bzr, cdv, mtn, svn, cvs, svk or tla. +# +# ...and is a freely configurable string, assignable by the +# user as the first argument to vcs_info() (see its description below). +# +# There is are three special values for : The first is named +# 'init', that is in effect as long as there was no decision what vcs +# backend to use. The second is 'preinit; it is used *before* vcs_info() +# is run, when initializing the data exporting variables. The third +# special value is 'formats' and is used by the 'vcs_info_lastmsg' for +# looking up its styles. +# +# There are two pre-defined values for : +# default - the one used if none is specified +# command - used by vcs_info_lastmsg to lookup its styles. +# +# You may *not* use 'print_systems_' as a user-context string, because it +# is used internally. +# +# You can of course use ':vcs_info:*' to match all VCSs in all +# user-contexts at once. +# +# Another special context is 'formats', which is used by the +# vcs_info_lastmsg() utility function (see below). +# +# +# This is a description of all styles, that are looked up: +# formats - A list of formats, used when actionformats is not +# used (which is most of the time). +# actionformats - A list of formats, used if a there is a special +# action going on in your current repository; +# (like an interactive rebase or a merge conflict) +# branchformat - Some backends replace %b in the formats and +# actionformats styles above, not only by a branch +# name but also by a revision number. This style +# let's you modify how that string should look like. +# nvcsformats - These "formats" are exported, when we didn't detect +# a version control system for the current directory. +# This is useful, if you want vcs_info() to completely +# take over the generation of your prompt. +# You would do something like +# PS1='${VCS_INFO_message_0_}' +# to accomplish that. +# max-exports - Defines the maximum number if VCS_INFO_message_*_ +# variables vcs_info() will export. +# enable - Checked in the 'init' context. If set to false, +# vcs_info() will do nothing. +# disable - Provide a list of systems, you don't want +# the vcs_info() to check for repositories +# (checked in the 'init' context, too). +# disable-patterns - A list of patterns that are checked against $PWD. +# If the pattern matches, vcs_info will be disabled. +# Say, ~/.zsh is a directory under version control, +# in which you do not want vcs_info to be active, do: +# zstyle ':vcs_info:*' disable-patterns "$HOME/.zsh+(|/*)" +# use-simple - If there are two different ways of gathering +# information, you can select the simpler one +# by setting this style to true; the default +# is to use the not-that-simple code, which is +# potentially a lot slower but might be more +# accurate in all possible cases. +# use-prompt-escapes - determines if we assume that the assembled +# string from vcs_info() includes prompt escapes. +# (Used by vcs_info_lastmsg(). +# +# The use-simple style is only available for the bzr backend. +# +# The default values for these in all contexts are: +# formats " (%s)-[%b|%a]-" +# actionformats " (%s)-[%b]-" +# branchformat "%b:%r" (for bzr, svn and svk) +# nvcsformats "" +# max-exports 2 +# enable true +# disable (empty list) +# disable-patterns (empty list) +# use-simple false +# use-prompt-escapes true +# +# +# In normal formats and actionformats, the following replacements +# are done: +# %s - The vcs in use (git, hg, svn etc.) +# %b - Information about the current branch. +# %a - An identifier, that describes the action. +# Only makes sense in actionformats. +# %R - base directory of the repository. +# %r - repository name +# If %R is '/foo/bar/repoXY', %r is 'repoXY'. +# %S - subdirectory within a repository. if $PWD is +# '/foo/bar/reposXY/beer/tasty', %S is 'beer/tasty'. +# +# +# In branchformat these replacements are done: +# %b - the branch name +# %r - the current revision number +# +# Not all vcs backends have to support all replacements. +# nvcsformat does not perform *any* replacements. It is just a string. +#}}} +# +# ODDITIES: +#{{{ +# If you want to use the %b (bold off) prompt expansion in 'formats', which +# expands %b itself, use %%b. That will cause the vcs_info() expansion to +# replace %%b with %b. So zsh's prompt expansion mechanism can handle it. +# Similarly, to hand down %b from branchformat, use %%%%b. Sorry for this +# inconvenience, but it cannot be easily avoided. Luckily we do not clash +# with a lot of prompt expansions and this only needs to be done for those. +# See 'man zshmisc' for details about EXPANSION OF PROMPT SEQUENCES. +#}}} +# +# FUNCTION DESCRIPTIONS (public API): +#{{{ +# vcs_info() +# The main function, that runs all backends and assembles +# all data into ${VCS_INFO_message_*_}. This is the function +# you want to call from precmd() if you want to include +# up-to-date information in your prompt (see VARIABLE +# DESCRIPTION below). +# +# vcs_info_printsys() +# Prints a list of all supported version control systems. +# Useful to find out possible contexts (and which of them are enabled) +# or values for the 'disable' style. +# +# vcs_info_lastmsg() +# Outputs the last ${VCS_INFO_message_*_} value. Takes into account +# the value of the use-prompt-escapes style in ':vcs_info:formats'. +# It also only prints max-exports values. +# +# All functions named VCS_INFO_* are for internal use only. +#}}} +# +# VARIABLE DESCRIPTION: +#{{{ +# ${VCS_INFO_message_N_} (Note the trailing underscore) +# Where 'N' is an integer, eg: VCS_INFO_message_0_ +# These variables are the storage for the informational message the +# last vcs_info() call has assembled. These are strongly connected +# to the formats, actionformats and nvcsformats styles described +# above. Those styles are lists. the first member of that list gets +# expanded into ${VCS_INFO_message_0_}, the second into +# ${VCS_INFO_message_1_} and the Nth into ${VCS_INFO_message_N-1_}. +# These parameters are exported into the environment. +# (See the max-exports style above.) +#}}} +# +# EXAMPLES: +#{{{ +# Don't use vcs_info at all (even though it's in your prompt): +# % zstyle ':vcs_info:*' enable false +# +# Disable the backends for bzr and svk: +# % zstyle ':vcs_info:*' disable bzr svk +# +# Provide a special formats for git: +# % zstyle ':vcs_info:git:*' formats ' GIT, BABY! [%b]' +# % zstyle ':vcs_info:git:*' actionformats ' GIT ACTION! [%b|%a]' +# +# Use the quicker bzr backend (if you do, please report if it does +# the-right-thing[tm] - thanks): +# % zstyle ':vcs_info:bzr:*' use-simple true +# +# Display the revision number in yellow for bzr and svn: +# % zstyle ':vcs_info:(svn|bzr):*' branchformat '%b%{'${fg[yellow]}'%}:%r' +# +# If you want colors, make sure you enclose the color codes in %{...%}, +# if you want to use the string provided by vcs_info() in prompts. +# +# Here is how to print the vcs infomation as a command: +# % alias vcsi='vcs_info command; vcs_info_lastmsg' +# +# This way, you can even define different formats for output via +# vcs_info_lastmsg() in the ':vcs_info:command:*' namespace. +#}}} +#}}} +# utilities +VCS_INFO_adjust () { #{{{ + [[ -n ${vcs_comm[overwrite_name]} ]] && vcs=${vcs_comm[overwrite_name]} + return 0 +} +# }}} +VCS_INFO_check_com () { #{{{ + (( ${+commands[$1]} )) && [[ -x ${commands[$1]} ]] && return 0 + return 1 +} +# }}} +VCS_INFO_formats () { # {{{ + setopt localoptions noksharrays + local action=$1 branch=$2 base=$3 + local msg + local -i i + + if [[ -n ${action} ]] ; then + zstyle -a ":vcs_info:${vcs}:${usercontext}" actionformats msgs + (( ${#msgs} < 1 )) && msgs[1]=' (%s)-[%b|%a]-' + else + zstyle -a ":vcs_info:${vcs}:${usercontext}" formats msgs + (( ${#msgs} < 1 )) && msgs[1]=' (%s)-[%b]-' + fi + + (( ${#msgs} > maxexports )) && msgs[$(( maxexports + 1 )),-1]=() + for i in {1..${#msgs}} ; do + zformat -f msg ${msgs[$i]} \ + a:${action} \ + b:${branch} \ + r:${base:t} \ + s:${vcs} \ + R:${base} \ + S:"$(VCS_INFO_reposub ${base})" + msgs[$i]=${msg} + done + return 0 +} +# }}} +VCS_INFO_maxexports () { #{{{ + zstyle -s ":vcs_info:${vcs}:${usercontext}" "max-exports" maxexports || maxexports=2 + if [[ ${maxexports} != <-> ]] || (( maxexports < 1 )); then + printf 'vcs_info(): expecting numeric arg >= 1 for max-exports (got %s).\n' ${maxexports} + printf 'Defaulting to 2.\n' + maxexports=2 + fi +} +# }}} +VCS_INFO_nvcsformats () { #{{{ + setopt localoptions noksharrays + local c v + + if [[ $1 == 'preinit' ]] ; then + c=default + v=preinit + fi + zstyle -a ":vcs_info:${v:-$vcs}:${c:-$usercontext}" nvcsformats msgs + (( ${#msgs} > maxexports )) && msgs[${maxexports},-1]=() +} +# }}} +VCS_INFO_realpath () { #{{{ + # a portable 'readlink -f' + # forcing a subshell, to ensure chpwd() is not removed + # from the calling shell (if VCS_INFO_realpath() is called + # manually). + ( + (( ${+functions[chpwd]} )) && unfunction chpwd + setopt chaselinks + cd $1 2>/dev/null && pwd + ) +} +# }}} +VCS_INFO_reposub () { #{{{ + setopt localoptions extendedglob + local base=${1%%/##} + + [[ ${PWD} == ${base}/* ]] || { + printf '.' + return 1 + } + printf '%s' ${PWD#$base/} + return 0 +} +# }}} +VCS_INFO_set () { #{{{ + setopt localoptions noksharrays + local -i i j + + if [[ $1 == '--clear' ]] ; then + for i in {0..9} ; do + unset VCS_INFO_message_${i}_ + done + fi + if [[ $1 == '--nvcs' ]] ; then + [[ $2 == 'preinit' ]] && (( maxexports == 0 )) && (( maxexports = 1 )) + for i in {0..$((maxexports - 1))} ; do + typeset -gx VCS_INFO_message_${i}_= + done + VCS_INFO_nvcsformats $2 + fi + + (( ${#msgs} - 1 < 0 )) && return 0 + for i in {0..$(( ${#msgs} - 1 ))} ; do + (( j = i + 1 )) + typeset -gx VCS_INFO_message_${i}_=${msgs[$j]} + done + return 0 +} +# }}} +# information gathering +VCS_INFO_bzr_get_data () { # {{{ + setopt localoptions noksharrays + local bzrbase bzrbr + local -a bzrinfo + + if zstyle -t ":vcs_info:${vcs}:${usercontext}" "use-simple" ; then + bzrbase=${vcs_comm[basedir]} + bzrinfo[2]=${bzrbase:t} + if [[ -f ${bzrbase}/.bzr/branch/last-revision ]] ; then + bzrinfo[1]=$(< ${bzrbase}/.bzr/branch/last-revision) + bzrinfo[1]=${${bzrinfo[1]}%% *} + fi + else + bzrbase=${${(M)${(f)"$( bzr info )"}:# ##branch\ root:*}/*: ##/} + bzrinfo=( ${${${(M)${(f)"$( bzr version-info )"}:#(#s)(revno|branch-nick)*}/*: /}/*\//} ) + bzrbase="$(VCS_INFO_realpath ${bzrbase})" + fi + + zstyle -s ":vcs_info:${vcs}:${usercontext}" branchformat bzrbr || bzrbr="%b:%r" + zformat -f bzrbr "${bzrbr}" "b:${bzrinfo[2]}" "r:${bzrinfo[1]}" + VCS_INFO_formats '' "${bzrbr}" "${bzrbase}" + return 0 +} +# }}} +VCS_INFO_cdv_get_data () { # {{{ + local cdvbase + + cdvbase=${vcs_comm[basedir]} + VCS_INFO_formats '' "${cdvbase:t}" "${cdvbase}" + return 0 +} +# }}} +VCS_INFO_cvs_get_data () { # {{{ + local cvsbranch cvsbase basename + + cvsbase="." + while [[ -d "${cvsbase}/../CVS" ]]; do + cvsbase="${cvsbase}/.." + done + cvsbase="$(VCS_INFO_realpath ${cvsbase})" + cvsbranch=$(< ./CVS/Repository) + basename=${cvsbase:t} + cvsbranch=${cvsbranch##${basename}/} + [[ -z ${cvsbranch} ]] && cvsbranch=${basename} + VCS_INFO_formats '' "${cvsbranch}" "${cvsbase}" + return 0 +} +# }}} +VCS_INFO_darcs_get_data () { # {{{ + local darcsbase + + darcsbase=${vcs_comm[basedir]} + VCS_INFO_formats '' "${darcsbase:t}" "${darcsbase}" + return 0 +} +# }}} +VCS_INFO_git_getaction () { #{{{ + local gitaction='' gitdir=$1 + local tmp + + for tmp in "${gitdir}/rebase-apply" \ + "${gitdir}/rebase" \ + "${gitdir}/../.dotest" ; do + if [[ -d ${tmp} ]] ; then + if [[ -f "${tmp}/rebasing" ]] ; then + gitaction="rebase" + elif [[ -f "${tmp}/applying" ]] ; then + gitaction="am" + else + gitaction="am/rebase" + fi + printf '%s' ${gitaction} + return 0 + fi + done + + for tmp in "${gitdir}/rebase-merge/interactive" \ + "${gitdir}/.dotest-merge/interactive" ; do + if [[ -f "${tmp}" ]] ; then + printf '%s' "rebase-i" + return 0 + fi + done + + for tmp in "${gitdir}/rebase-merge" \ + "${gitdir}/.dotest-merge" ; do + if [[ -d "${tmp}" ]] ; then + printf '%s' "rebase-m" + return 0 + fi + done + + if [[ -f "${gitdir}/MERGE_HEAD" ]] ; then + printf '%s' "merge" + return 0 + fi + + if [[ -f "${gitdir}/BISECT_LOG" ]] ; then + printf '%s' "bisect" + return 0 + fi + return 1 +} +# }}} +VCS_INFO_git_getbranch () { #{{{ + local gitbranch gitdir=$1 + local gitsymref='git symbolic-ref HEAD' + + if [[ -d "${gitdir}/rebase-apply" ]] \ + || [[ -d "${gitdir}/rebase" ]] \ + || [[ -d "${gitdir}/../.dotest" ]] \ + || [[ -f "${gitdir}/MERGE_HEAD" ]] ; then + gitbranch="$(${(z)gitsymref} 2> /dev/null)" + [[ -z ${gitbranch} ]] && [[ -r ${gitdir}/rebase-apply/head-name ]] \ + && gitbranch="$(< ${gitdir}/rebase-apply/head-name)" + + elif [[ -f "${gitdir}/rebase-merge/interactive" ]] \ + || [[ -d "${gitdir}/rebase-merge" ]] ; then + gitbranch="$(< ${gitdir}/rebase-merge/head-name)" + + elif [[ -f "${gitdir}/.dotest-merge/interactive" ]] \ + || [[ -d "${gitdir}/.dotest-merge" ]] ; then + gitbranch="$(< ${gitdir}/.dotest-merge/head-name)" + + else + gitbranch="$(${(z)gitsymref} 2> /dev/null)" + + if [[ $? -ne 0 ]] ; then + gitbranch="$(git describe --exact-match HEAD 2>/dev/null)" + + if [[ $? -ne 0 ]] ; then + gitbranch="${${"$(< $gitdir/HEAD)"}[1,7]}..." + fi + fi + fi + + printf '%s' "${gitbranch##refs/heads/}" + return 0 +} +# }}} +VCS_INFO_git_get_data () { # {{{ + setopt localoptions extendedglob + local gitdir gitbase gitbranch gitaction + + gitdir=${vcs_comm[gitdir]} + gitbranch="$(VCS_INFO_git_getbranch ${gitdir})" + + if [[ -z ${gitdir} ]] || [[ -z ${gitbranch} ]] ; then + return 1 + fi + + VCS_INFO_adjust + gitaction="$(VCS_INFO_git_getaction ${gitdir})" + gitbase=${PWD%/${$( git rev-parse --show-prefix )%/##}} + VCS_INFO_formats "${gitaction}" "${gitbranch}" "${gitbase}" + return 0 +} +# }}} +VCS_INFO_hg_get_data () { # {{{ + local hgbranch hgbase file + + hgbase=${vcs_comm[basedir]} + + file="${hgbase}/.hg/branch" + if [[ -r ${file} ]] ; then + hgbranch=$(< ${file}) + else + hgbranch='default' + fi + + VCS_INFO_formats '' "${hgbranch}" "${hgbase}" + return 0 +} +# }}} +VCS_INFO_mtn_get_data () { # {{{ + local mtnbranch mtnbase + + mtnbase=${vcs_comm[basedir]} + mtnbranch=${${(M)${(f)"$( mtn status )"}:#(#s)Current branch:*}/*: /} + VCS_INFO_formats '' "${mtnbranch}" "${mtnbase}" + return 0 +} +# }}} +VCS_INFO_svk_get_data () { # {{{ + local svkbranch svkbase + + svkbase=${vcs_comm[basedir]} + zstyle -s ":vcs_info:${vcs}:${usercontext}" branchformat svkbranch || svkbranch="%b:%r" + zformat -f svkbranch "${svkbranch}" "b:${vcs_comm[branch]}" "r:${vcs_comm[revision]}" + VCS_INFO_formats '' "${svkbranch}" "${svkbase}" + return 0 +} +# }}} +VCS_INFO_svn_get_data () { # {{{ + setopt localoptions noksharrays + local svnbase svnbranch + local -a svninfo + + svnbase="." + while [[ -d "${svnbase}/../.svn" ]]; do + svnbase="${svnbase}/.." + done + svnbase="$(VCS_INFO_realpath ${svnbase})" + svninfo=( ${${${(M)${(f)"$( svn info )"}:#(#s)(URL|Revision)*}/*: /}/*\//} ) + + zstyle -s ":vcs_info:${vcs}:${usercontext}" branchformat svnbranch || svnbranch="%b:%r" + zformat -f svnbranch "${svnbranch}" "b:${svninfo[1]}" "r:${svninfo[2]}" + VCS_INFO_formats '' "${svnbranch}" "${svnbase}" + return 0 +} +# }}} +VCS_INFO_tla_get_data () { # {{{ + local tlabase tlabranch + + tlabase="$(VCS_INFO_realpath ${vcs_comm[basedir]})" + # tree-id gives us something like 'foo@example.com/demo--1.0--patch-4', so: + tlabranch=${${"$( tla tree-id )"}/*\//} + VCS_INFO_formats '' "${tlabranch}" "${tlabase}" + return 0 +} +# }}} +# detection +VCS_INFO_detect_by_dir() { #{{{ + local dirname=$1 + local basedir="." realbasedir + + realbasedir="$(VCS_INFO_realpath ${basedir})" + while [[ ${realbasedir} != '/' ]]; do + if [[ -n ${vcs_comm[detect_need_file]} ]] ; then + [[ -d ${basedir}/${dirname} ]] && \ + [[ -e ${basedir}/${dirname}/${vcs_comm[detect_need_file]} ]] && \ + break + else + [[ -d ${basedir}/${dirname} ]] && break + fi + + basedir=${basedir}/.. + realbasedir="$(VCS_INFO_realpath ${basedir})" + done + + [[ ${realbasedir} == "/" ]] && return 1 + vcs_comm[basedir]=${realbasedir} + return 0 +} +# }}} +VCS_INFO_bzr_detect() { #{{{ + VCS_INFO_check_com bzr || return 1 + vcs_comm[detect_need_file]=branch/format + VCS_INFO_detect_by_dir '.bzr' + return $? +} +# }}} +VCS_INFO_cdv_detect() { #{{{ + VCS_INFO_check_com cdv || return 1 + vcs_comm[detect_need_file]=format + VCS_INFO_detect_by_dir '.cdv' + return $? +} +# }}} +VCS_INFO_cvs_detect() { #{{{ + VCS_INFO_check_com svn || return 1 + [[ -d "./CVS" ]] && [[ -r "./CVS/Repository" ]] && return 0 + return 1 +} +# }}} +VCS_INFO_darcs_detect() { #{{{ + VCS_INFO_check_com darcs || return 1 + vcs_comm[detect_need_file]=format + VCS_INFO_detect_by_dir '_darcs' + return $? +} +# }}} +VCS_INFO_git_detect() { #{{{ + if VCS_INFO_check_com git && git rev-parse --is-inside-work-tree &> /dev/null ; then + vcs_comm[gitdir]="$(git rev-parse --git-dir 2> /dev/null)" || return 1 + if [[ -d ${vcs_comm[gitdir]}/svn ]] ; then vcs_comm[overwrite_name]='git-svn' + elif [[ -d ${vcs_comm[gitdir]}/refs/remotes/p4 ]] ; then vcs_comm[overwrite_name]='git-p4' ; fi + return 0 + fi + return 1 +} +# }}} +VCS_INFO_hg_detect() { #{{{ + VCS_INFO_check_com hg || return 1 + vcs_comm[detect_need_file]=store + VCS_INFO_detect_by_dir '.hg' + return $? +} +# }}} +VCS_INFO_mtn_detect() { #{{{ + VCS_INFO_check_com mtn || return 1 + vcs_comm[detect_need_file]=revision + VCS_INFO_detect_by_dir '_MTN' + return $? +} +# }}} +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 +} +# }}} +VCS_INFO_svn_detect() { #{{{ + VCS_INFO_check_com svn || return 1 + [[ -d ".svn" ]] && return 0 + return 1 +} +# }}} +VCS_INFO_tla_detect() { #{{{ + VCS_INFO_check_com tla || return 1 + vcs_comm[basedir]="$(tla tree-root 2> /dev/null)" && return 0 + return 1 +} +# }}} +# public API +vcs_info_printsys () { # {{{ + vcs_info print_systems_ +} +# }}} +vcs_info_lastmsg () { # {{{ + local -i i + + VCS_INFO_maxexports + for i in {0..$((maxexports - 1))} ; do + printf '$VCS_INFO_message_%d_: "' $i + if zstyle -T ':vcs_info:formats:command' use-prompt-escapes ; then + print -nP ${(P)${:-VCS_INFO_message_${i}_}} + else + print -n ${(P)${:-VCS_INFO_message_${i}_}} + fi + printf '"\n' + done +} +# }}} +vcs_info () { # {{{ + local pat + local -i found + local -a VCSs disabled dps + local -x vcs usercontext + local -ix maxexports + local -ax msgs + local -Ax vcs_comm + + vcs="init" + VCSs=(git hg bzr darcs svk mtn svn cvs cdv tla) + case $1 in + (print_systems_) + zstyle -a ":vcs_info:${vcs}:${usercontext}" "disable" disabled + print -l '# list of supported version control backends:' \ + '# disabled systems are prefixed by a hash sign (#)' + for vcs in ${VCSs} ; do + [[ -n ${(M)disabled:#${vcs}} ]] && printf '#' + printf '%s\n' ${vcs} + done + print -l '# flavours (cannot be used in the disable style; they' \ + '# are disabled with their master [git-svn -> git]):' \ + git-{p4,svn} + return 0 + ;; + ('') + [[ -z ${usercontext} ]] && usercontext=default + ;; + (*) [[ -z ${usercontext} ]] && usercontext=$1 + ;; + esac + + zstyle -T ":vcs_info:${vcs}:${usercontext}" "enable" || { + [[ -n ${VCS_INFO_message_0_} ]] && VCS_INFO_set --clear + return 0 + } + zstyle -a ":vcs_info:${vcs}:${usercontext}" "disable" disabled + + zstyle -a ":vcs_info:${vcs}:${usercontext}" "disable-patterns" dps + for pat in ${dps} ; do + if [[ ${PWD} == ${~pat} ]] ; then + [[ -n ${vcs_info_msg_0_} ]] && VCS_INFO_set --clear + return 0 + fi + done + + VCS_INFO_maxexports + + (( found = 0 )) + for vcs in ${VCSs} ; do + [[ -n ${(M)disabled:#${vcs}} ]] && continue + vcs_comm=() + VCS_INFO_${vcs}_detect && (( found = 1 )) && break + done + + (( found == 0 )) && { + VCS_INFO_set --nvcs + return 0 + } + + VCS_INFO_${vcs}_get_data || { + VCS_INFO_set --nvcs + return 1 + } + + VCS_INFO_set + return 0 +} + +#VCS_INFO_set --nvcs preinit +# }}} + +# Change vcs_info formats for the grml prompt. The 2nd format sets up +# $vcs_info_msg_1_ to contain "zsh: repo-name" used to set our screen title. +# TODO: The included vcs_info() version still uses $VCS_INFO_message_N_. +# That needs to be the use of $VCS_INFO_message_N_ needs to be changed +# to $vcs_info_msg_N_ as soon as we use the included version. +#if [[ "$TERM" == dumb ]] ; then +# zstyle ':vcs_info:*' actionformats "(%s%)-[%b|%a] " "zsh: %r" +# zstyle ':vcs_info:*' formats "(%s%)-[%b] " "zsh: %r" +#else +# # these are the same, just with a lot of colours: +# zstyle ':vcs_info:*' actionformats "${MAGENTA}(${NO_COLOUR}%s${MAGENTA})${YELLOW}-${MAGENTA}[${GREEN}%b${YELLOW}|${RED}%a${MAGENTA}]${NO_COLOUR} " \ +# "zsh: %r" +# zstyle ':vcs_info:*' formats "${MAGENTA}(${NO_COLOUR}%s${MAGENTA})${YELLOW}-${MAGENTA}[${GREEN}%b${MAGENTA}]${NO_COLOUR}%} " \ +# "zsh: %r" +# zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat "%b${RED}:${YELLOW}%r" +#fi + +# }}} -- cgit v1.2.3