## vim:ft=zsh et
## bazaar support by: Frank Terbeck <ft@bewatermyfriend.org>
## mostly rewritten by: Jan Pobrislo <ccx@webprojekty.cz>
## 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
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
}
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
}
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="$(VCS_INFO_realpath ${bzrbase})"
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