## vim:ft=zsh et ## bazaar support by: Frank Terbeck ## mostly rewritten by: Jan Pobrislo ## Distributed under the same BSD-ish license as zsh itself. setopt localoptions noksharrays extendedglob NO_shwordsplit local bzrbase bzrbr bzr_changes bzr_type local -a bzrinfo local -A hook_com bzr_info (( ${+functions[VCS_INFO_bzr_get_info]} )) || VCS_INFO_bzr_get_info() { bzrinfo=( ${(s.:.)$( ${vcs_comm[cmd]} version-info --custom \ --template="{revno}:{branch_nick}:{clean}")} ) if zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" "check-for-changes" then VCS_INFO_bzr_get_changes elif [[ ${bzrinfo[2]} == 1 ]] then bzr_changes = '1' fi } (( ${+functions[VCS_INFO_bzr_get_info_restricted]} )) || VCS_INFO_bzr_get_info_restricted() { # we are forbidden from fetching info on bound branch from remote repository bzrinfo=( $(${vcs_comm[cmd]} revno) ${bzrbase:t} ) if zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" "check-for-changes" && \ [[ ! $bzr_type == lightweigth ]] then VCS_INFO_bzr_get_changes fi } (( ${+functions[VCS_INFO_bzr_get_changes]} )) || VCS_INFO_bzr_get_changes() { local -A counts local line flag bzr_changes=$( ${vcs_comm[cmd]} stat -SV | while read flag line do counts[${flag}]=$(( ${counts[${flag}]:-0} + 1 )) done for flag in ${(k)counts} do printf "%s:%d " $flag ${counts[${flag}]} done ) } if zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" "use-simple" ; then # simple parsing will fail to fetch information from lightweigth checkouts 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 # Parse the output of 'bzr info' into associative array bzr_info ${vcs_comm[cmd]} info | { local line key value dirtype read dirtype grep '^[ a-zA-Z0-9]\+: ' | while read line do value=${line#*': '} key=${${line%%: *}// /_} bzr_info[$key]=$value done } case "$dirtype" in ('Checkout'*) bzr_type=checkout bzrbase=${bzr_info[checkout_root]} ;; ('Repository checkout'*) bzr_type=checkout bzrbase=${bzr_info[repository_checkout_root]} ;; ('Lightweight checkout'*) bzr_type=lightweigth bzrbase=${bzr_info[light_checkout_root]} ;; (*) bzr_type=standalone bzrbase=${bzr_info[branch_root]} ;; esac bzrbase=${bzrbase:P} if [ -n "${bzr_info[checkout_of_branch]}" ] && \ zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" "use-server" then VCS_INFO_bzr_get_info else case ${bzr_info[checkout_of_branch]} in (file://*) VCS_INFO_bzr_get_info ;; (*://*) VCS_INFO_bzr_get_info_restricted ;; (*) VCS_INFO_bzr_get_info ;; esac fi fi rrn=${bzrbase:t} zstyle -s ":vcs_info:${vcs}:${usercontext}:${rrn}" branchformat bzrbr || bzrbr="%b:%r" hook_com=( branch "${bzrinfo[2]}" revision "${bzrinfo[1]}" ) if VCS_INFO_hook 'set-branch-format' "${bzrbr}"; then zformat -f bzrbr "${bzrbr}" "b:${hook_com[branch]}" "r:${hook_com[revision]}" else bzrbr=${hook_com[branch-replace]} fi hook_com=() VCS_INFO_formats '' "${bzrbr}" "${bzrbase}" '' "${bzr_changes}" "${bzrinfo[1]}" "${bzr_changes}" return 0