## vim:ft=zsh ## Written by Frank Terbeck ## Distributed under the same BSD-ish license as zsh itself. setopt localoptions noksharrays NO_shwordsplit local msg tmp local -i i local -xA hook_com # The _origs are needed because hooks can change values and there would # be no way to get the originals back for later hooks (a hook is run for # each message, that's being created). hook_com=( action "$1" action_orig "$1" branch "$2" branch_orig "$2" base "$3" base_orig "$3" staged "$4" staged_orig "$4" unstaged "$5" unstaged_orig "$5" revision "$6" revision_orig "$6" misc "$7" misc_orig "$7" vcs "${vcs}" vcs_orig "${vcs}" ) hook_com[base-name]="${${hook_com[base]}:t}" hook_com[base-name_orig]="${hook_com[base_name]}" hook_com[subdir]="$(VCS_INFO_reposub ${hook_com[base]})" hook_com[subdir_orig]="${hook_com[subdir]}" VCS_INFO_hook 'post-backend' ## description: # action: a string that signals a certain non-default condition in the # repository (like 'rebase-i' in git). If this in non-empty, # the actionformats will be used, too. # branch: the name of the currently checked out branch. # base: the full name of the repository's root directory. # staged: non-empty if the repository contains staged changes. # unstaged: non-empty if the repository contains unstaged changes. # revision: an identifier of the currently checked out revision. # misc: a string that may contain anything the backend author likes. # # If an argument has no valid value for a given backend, an empty value # should be provided. eg: # VCS_INFO_formats '' "${foobranch}" "${foobase}" '' '' '' "${foomisc}" if [[ -n ${hook_com[action]} ]] ; then zstyle -a ":vcs_info:${vcs}:${usercontext}:${rrn}" actionformats msgs (( ${#msgs} < 1 )) && msgs[1]=' (%s)-[%b|%a]%u%c-' else zstyle -a ":vcs_info:${vcs}:${usercontext}:${rrn}" formats msgs (( ${#msgs} < 1 )) && msgs[1]=' (%s)-[%b]%u%c-' fi if [[ -n ${hook_com[staged]} ]] ; then zstyle -s ":vcs_info:${vcs}:${usercontext}:${rrn}" stagedstr tmp [[ -z ${tmp} ]] && hook_com[staged]='S' || hook_com[staged]=${tmp} fi if [[ -n ${hook_com[unstaged]} ]] ; then zstyle -s ":vcs_info:${vcs}:${usercontext}:${rrn}" unstagedstr tmp [[ -z ${tmp} ]] && hook_com[unstaged]='U' || hook_com[unstaged]=${tmp} fi if [[ ${quiltmode} != 'standalone' ]] && VCS_INFO_hook "pre-addon-quilt"; then local -x REPLY VCS_INFO_quilt addon hook_com[quilt]="${REPLY}" unset REPLY elif [[ ${quiltmode} == 'standalone' ]]; then hook_com[quilt]=${hook_com[misc]} fi (( ${#msgs} > maxexports )) && msgs[$(( maxexports + 1 )),-1]=() for i in {1..${#msgs}} ; do if VCS_INFO_hook "set-message" $(( $i - 1 )) "${msgs[$i]}"; then zformat -f msg ${msgs[$i]} \ a:${hook_com[action]} \ b:${hook_com[branch]} \ c:${hook_com[staged]} \ i:${hook_com[revision]} \ m:${hook_com[misc]} \ r:${hook_com[base-name]} \ s:${hook_com[vcs]} \ u:${hook_com[unstaged]} \ Q:${hook_com[quilt]} \ R:${hook_com[base]} \ S:${hook_com[subdir]} msgs[$i]=${msg} else msgs[$i]=${hook_com[message]} fi done hook_com=() backend_misc=() return 0