zshrc: Handle a state of git in vcs_info(), when a normal rebase conflicts
[grml-etc-core.git] / etc / zsh / zshrc
index 6de5c64..7a33c2d 100644 (file)
@@ -1101,7 +1101,7 @@ VCS_INFO_git_getaction () { #{{{
             else
                 gitaction="am/rebase"
             fi
-            print '%s' ${gitaction}
+            printf '%s' ${gitaction}
             return 0
         fi
     done
@@ -1142,6 +1142,7 @@ VCS_INFO_git_getbranch () { #{{{
        || [[ -d "${gitdir}/../.dotest" ]]   \
        || [[ -f "${gitdir}/MERGE_HEAD" ]] ; then
         gitbranch="$(${(z)gitsymref} 2> /dev/null)"
+        [[ -z ${gitbranch} ]] && gitbranch="$(< ${gitdir}/rebase-apply/head-name)"
 
     elif   [[ -f "${gitdir}/rebase-merge/interactive" ]] \
         || [[ -d "${gitdir}/rebase-merge" ]] ; then
@@ -1252,10 +1253,23 @@ VCS_INFO_bzr_get_data () { # {{{
 # }}}
 # VCS_INFO_*_detect () {{{
 
+VCS_INFO_detect_by_dir() {
+    local tool=${1} dirname=${2}
+    local basedir="."
+
+    check_com -c ${tool} || return 1
+    while [[ ! -d ${basedir}/${dirname} ]]; do
+        basedir=${basedir}/..
+        [[ $(VCS_INFO_realpath ${basedir}) = "/" ]] && return 1
+    done
+
+    printf '%s' $(VCS_INFO_realpath ${basedir})
+    return 0
+}
+
 VCS_INFO_bzr_detect() {
-    check_com -c bzr || return 1
-    [[ -d ".bzr" ]] && return 0
-    return 1
+    VCS_INFO_detect_by_dir 'bzr' '.bzr'
+    return $?
 }
 
 VCS_INFO_git_detect() {
@@ -1264,16 +1278,8 @@ VCS_INFO_git_detect() {
 }
 
 VCS_INFO_hg_detect() {
-    local basedir="."
-
-    check_com -c hg || return 1
-    while [[ ! -d ${basedir}/.hg ]]; do
-        basedir=${basedir}/..
-        [[ $(VCS_INFO_realpath ${basedir}) = "/" ]] && return 1
-    done
-
-    printf '%s' $(VCS_INFO_realpath ${basedir})
-    return 0
+    VCS_INFO_detect_by_dir 'hg' '.hg'
+    return $?
 }
 
 VCS_INFO_svk_detect() {