summaryrefslogtreecommitdiff
path: root/Functions/VCS_Info
diff options
context:
space:
mode:
authorJoe Rayhawk <jrayhawk@fairlystable.org>2025-04-30 02:07:56 -0700
committerJoe Rayhawk <jrayhawk@fairlystable.org>2025-04-30 02:07:56 -0700
commit26e09889646be3ea65b4a3dfeda26213e4bb6a27 (patch)
tree4f3c73a9416bf47ad7e125383d23cf42879e38d7 /Functions/VCS_Info
parent841bce705a58b04220b1f257abcc00ae71cbdbdc (diff)
parent001cba48ce3b964cf01fb3e2af54b20eacbc9bf5 (diff)
downloadzsh-26e09889646be3ea65b4a3dfeda26213e4bb6a27.tar.gz
zsh-26e09889646be3ea65b4a3dfeda26213e4bb6a27.zip
Merge branch 'upstream' into debian
Diffstat (limited to 'Functions/VCS_Info')
-rw-r--r--Functions/VCS_Info/Backends/VCS_INFO_get_data_git44
1 files changed, 33 insertions, 11 deletions
diff --git a/Functions/VCS_Info/Backends/VCS_INFO_get_data_git b/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
index e45eebc8e..9a608adab 100644
--- a/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
+++ b/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
@@ -184,15 +184,8 @@ fi
VCS_INFO_adjust
VCS_INFO_git_getaction ${gitdir}
-local patchdir=${gitdir}/patches/${gitbranch}
-if [[ -d $patchdir ]] && [[ -f $patchdir/applied ]] \
- && [[ -f $patchdir/unapplied ]]
-then
- # stgit
- git_patches_applied=(${(f)"$(< "${patchdir}/applied")"})
- git_patches_unapplied=(${(f)"$(< "${patchdir}/unapplied")"})
- VCS_INFO_git_handle_patches
-elif [[ -d "${gitdir}/rebase-merge" ]]; then
+local patchdir
+if [[ -d "${gitdir}/rebase-merge" ]]; then
# 'git rebase -i'
patchdir="${gitdir}/rebase-merge"
local p
@@ -251,7 +244,9 @@ elif [[ -d "${gitdir}/rebase-merge" ]]; then
(( $+REPLY )) && git_patches_applied+=( "$REPLY" )
done
fi
- if [[ -f "${patchdir}/git-rebase-todo" ]] ; then
+ if zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" get-unapplied &&
+ [[ -f "${patchdir}/git-rebase-todo" ]]
+ then
for p in ${(f)"$(< "${patchdir}/git-rebase-todo")"}; do
VCS_INFO_git_map_rebase_line_to_hash_and_subject "$p"
(( $+REPLY )) && git_patches_unapplied+=( "$REPLY" )
@@ -381,7 +376,9 @@ elif [[ -f "${gitdir}/CHERRY_PICK_HEAD" ]]; then
# TODO: maybe read up to the first blank line
IFS='' read -r subject < "${gitdir}/MERGE_MSG"
git_patches_applied=( "$(<${gitdir}/CHERRY_PICK_HEAD) ${subject}" )
- if [[ -f "${gitdir}/sequencer/todo" ]]; then
+ if zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" get-unapplied &&
+ [[ -f "${gitdir}/sequencer/todo" ]]
+ then
# Get the next patches, and remove the one that's in CHERRY_PICK_HEAD.
git_patches_unapplied=( ${${(M)${(f)"$(<"${gitdir}/sequencer/todo")"}:#pick *}#pick } )
git_patches_unapplied[1]=()
@@ -389,6 +386,31 @@ elif [[ -f "${gitdir}/CHERRY_PICK_HEAD" ]]; then
git_patches_unapplied=()
fi
VCS_INFO_git_handle_patches
+elif command -v stg >/dev/null &&
+ ${vcs_comm[cmd]} show-ref --quiet refs/stacks/${gitbranch} refs/heads/${gitbranch}.stgit 2>/dev/null &&
+ git_patches_applied=(${${(f)"$(stg series --noprefix --applied --description 2>/dev/null)"}/ #[#]})
+then
+ # Testing for StGit patches is done after testing for all git-proper
+ # patches/states. If a StGit user's repo is in one of those states, they
+ # will want to see that instead of the StGit patch info.
+
+ # Performance note: testing for the stg executable is done first because it
+ # is extremely cheap and there is nothing else to do if it isn't present.
+ # Using git to test whether a StGit stack is initialized is cheaper than
+ # running stg itself; especially for versions of StGit <= 2.0. Thus getting
+ # StGit patch info should only have a material runtime cost if StGit is
+ # installed and in-use for the current branch.
+
+ # In StGit >=1.2, the existence of refs/stacks/<branch> indicates StGit is
+ # initialized. In StGit >=0.15, it is refs/heads/<branch>.stgit.
+
+ # N.B. the "--noprefix" option is available in StGit 2.x as an alias for
+ # --no-prefix. The former is compatible with StGit versions going back to
+ # 2008.
+ if zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" get-unapplied; then
+ git_patches_unapplied=(${${(f)"$(stg series --noprefix --unapplied --description 2>/dev/null)"}/ #[#]})
+ fi
+ VCS_INFO_git_handle_patches
else
gitmisc=''
fi