Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: vcs_info: Major bzr backend update
- X-seq: zsh-workers 29411
- From: Frank Terbeck <ft@xxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxx
- Subject: PATCH: vcs_info: Major bzr backend update
- Date: Tue, 31 May 2011 20:37:41 +0200
- Cc: Frank Terbeck <ft@xxxxxxxxxxxxxxxxxxx>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
From: Jan Pobrislo <ccx@xxxxxxxxxxxxxx>
---
Now that 4.3.12 is out of the door, this is pretty much a rewrite of
the bzr backend of vcs_info by Jan. If you're using bzr a lot, give
it a run, play with the options and let us know if something breaks.
Thanks.
Functions/VCS_Info/Backends/VCS_INFO_get_data_bzr | 89 +++++++++++++++++++--
1 files changed, 83 insertions(+), 6 deletions(-)
diff --git a/Functions/VCS_Info/Backends/VCS_INFO_get_data_bzr b/Functions/VCS_Info/Backends/VCS_INFO_get_data_bzr
index 5d4deaa..cae1a3b 100644
--- a/Functions/VCS_Info/Backends/VCS_INFO_get_data_bzr
+++ b/Functions/VCS_Info/Backends/VCS_INFO_get_data_bzr
@@ -1,13 +1,52 @@
-## vim:ft=zsh
+## vim:ft=zsh et
## bazaar support by: Frank Terbeck <ft@xxxxxxxxxxxxxxxxxxx>
+## mostly rewritten by: Jan Pobrislo <ccx@xxxxxxxxxxxxxx>
## Distributed under the same BSD-ish license as zsh itself.
setopt localoptions noksharrays extendedglob NO_shwordsplit
-local bzrbase bzrbr
+local bzrbase bzrbr bzr_changes bzr_type
local -a bzrinfo
-local -xA hook_com
+local -xA 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
@@ -15,9 +54,46 @@ if zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" "use-simple" ; then
bzrinfo[1]=${${bzrinfo[1]}%% *}
fi
else
- bzrbase=${${(M)${(f)"$( ${vcs_comm[cmd]} info )"}:# ##branch\ root:*}/*: ##/}
- bzrinfo=( ${${${(M)${(f)"$( ${vcs_comm[cmd]} version-info )"}:#(#s)(revno|branch-nick)*}/*: /}/*\//} )
+ # 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}
@@ -29,5 +105,6 @@ else
bzrbr=${hook_com[branch-replace]}
fi
hook_com=()
-VCS_INFO_formats '' "${bzrbr}" "${bzrbase}" '' '' "${bzrinfo[1]}" ''
+
+VCS_INFO_formats '' "${bzrbr}" "${bzrbase}" '' "${bzr_changes}" "${bzrinfo[1]}" "${bzr_changes}"
return 0
--
1.7.5
Messages sorted by:
Reverse Date,
Date,
Thread,
Author