## vim:ft=zsh ## mercurial support by: Frank Terbeck ## Distributed under the same BSD-ish license as zsh itself. setopt localoptions NO_shwordsplit local file hgbranch hgbranch_name hgbase hglhash hgshash hglrev hgmisc \ r_branch hgchanges revformat VCS_INFO_hg_get_mq_top_patch () { local patchdir=$1 if [[ -e "${patchdir}/status" ]]; then local -a patches patches=(${(f)"$(< "${patchdir}/status")"}) printf "%s" "${patches[-1]/[^:]*:/}" return 0 fi return 1 } hgbase=${vcs_comm[basedir]} rrn=${hgbase:t} file="${hgbase}/.hg/branch" if [[ -r ${file} ]] ; then hgbranch_name=$(< ${file}) else hgbranch_name="default" fi hglhash='' hglrev='' if zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" get-revision ; then # Calling the 'hg' program is quite a bit too slow for prompts. # If there's a way around that, I'd be interested. # Disabled by default anyway, so no harm done. if zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" \ "check-for-changes" ; then HGRCPATH="/dev/null" ${vcs_comm[cmd]} id -i -n -b \ | read -r hglhash hglrev r_branch # Are there uncommitted-changes? if [[ $hglrev[-1] == + ]] ; then hgchanges=1 fi # Remove uncommitted-changes marker, if any hglrev=${hglrev/+/} hglhash=${hglhash/+/} else HGRCPATH="/dev/null" ${vcs_comm[cmd]} \ parents --template="{node} {node|short} {rev} {branches}\n" \ | read -r hglhash hgshash hglrev r_branch fi if [[ -n ${hglrev} ]] ; then zstyle -s ":vcs_info:${vcs}:${usercontext}:${rrn}" hgrevformat revformat || revformat="%r:%h" zformat -f hglrev "${revformat}" "r:${hglrev}" "h:${hglhash}" zstyle -s ":vcs_info:${vcs}:${usercontext}:${rrn}" branchformat hgbranch || hgbranch="%b:%r" zformat -f hgbranch "${hgbranch}" "b:${hgbranch_name}" "r:${hglrev}" fi else hgbranch="${hgbranch_name}" fi local patchdir=${hgbase}/.hg/patches/ if [[ -d $patchdir ]] ; then hgmisc=$(VCS_INFO_hg_get_mq_top_patch "${patchdir}") hgmisc=${hgmisc:-"no patch applied"} else hgmisc='' fi VCS_INFO_formats '' "${hgbranch}" "${hgbase}" '' "${hgchanges}" "${hglrev}" "${hgmisc}" return 0