about summary refs log tree commit diff
path: root/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
diff options
context:
space:
mode:
Diffstat (limited to 'Functions/VCS_Info/Backends/VCS_INFO_get_data_git')
-rw-r--r--Functions/VCS_Info/Backends/VCS_INFO_get_data_git47
1 files changed, 46 insertions, 1 deletions
diff --git a/Functions/VCS_Info/Backends/VCS_INFO_get_data_git b/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
index faab2b88a..a536165e1 100644
--- a/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
+++ b/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
@@ -89,6 +89,36 @@ VCS_INFO_git_getbranch () {
     return 0
 }
 
+VCS_INFO_git_get_stgit_top_patch () {
+    local patchdir=$1
+
+    if [[ -d "$patchdir" ]]; then
+        local -a patches
+        patches=(${(f)"$(< "${patchdir}/applied")"})
+        printf '%s' $patches[-1]
+        return 0
+    fi
+
+    return 1
+}
+
+VCS_INFO_git_get_stgit_unapplied() {
+    local patchdir=$1
+
+    if [[ -d "$patchdir" ]]; then
+        local -a patches
+        patches=(${(f)"$(< "${patchdir}/unapplied")"})
+        if [[ -z $patches[@] ]]; then
+            printf 0
+        else
+            printf '%d' $#patches
+        fi
+        return 0
+    fi
+
+    return 1
+}
+
 gitdir=${vcs_comm[gitdir]}
 gitbranch="$(VCS_INFO_git_getbranch ${gitdir})"
 if zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" get-revision && \
@@ -117,5 +147,20 @@ VCS_INFO_adjust
 gitaction="$(VCS_INFO_git_getaction ${gitdir})"
 gitbase=${PWD%/${$( ${vcs_comm[cmd]} rev-parse --show-prefix )%/##}}
 rrn=${gitbase:t}
-VCS_INFO_formats "${gitaction}" "${gitbranch}" "${gitbase}" "${gitstaged}" "${gitunstaged}" "${gitsha1}" ''
+
+local patchdir=${gitdir}/patches/${gitbranch}
+if [[ -d $patchdir ]] ; then
+    stgitpatch=$(VCS_INFO_git_get_stgit_top_patch "${patchdir}")
+    stgitunapplied=$(VCS_INFO_git_get_stgit_unapplied "${patchdir}")
+
+    stgitpatch=${stgitpatch:-"no patch applied"}
+
+    zstyle -s ":vcs_info:${vcs}:${usercontext}:${rrn}" stgitformat stgitmsg || stgitmsg=" %p (%c)"
+    zformat -f stgitmsg "${stgitmsg}" "p:${stgitpatch}" "c:${stgitunapplied}"
+    gitmisc=${stgitmsg}
+else
+    gitmisc=''
+fi
+
+VCS_INFO_formats "${gitaction}" "${gitbranch}" "${gitbase}" "${gitstaged}" "${gitunstaged}" "${gitsha1}" "${gitmisc}"
 return 0