mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-05-22 00:11:30 +02:00
51138: Updated StGit patch detection in vcs_info
The vcs_info patch detection code attempted to interrogate StGit patch stack state by inspecting .git/patches/applied and .git/patches/unapplied. As of StGit 0.15 (2009), patch stack metadata is captured in the repo's object database. And as of StGit 1.0 (2021), no stack or patch state is maintained in any files in the .git/ directory. Zsh's approach for interrogating StGit patch state is thus obsoleted. This patch updates vcs_info to determine whether StGit is initialized on a branch by looking at the appropriate git refs and uses StGit's prescribed interface for interrogating applied and unapplied patch state via the `stg series` command. This approach will work with all versions of StGit >=0.15. Signed-off-by: Peter Grayson <pete@jpgrayson.net>
This commit is contained in:
parent
2473d83521
commit
ca7c42e1ee
2 changed files with 32 additions and 9 deletions
|
@ -1,3 +1,8 @@
|
|||
2022-12-08 Peter Grayson <pete@jpgrayson.net>
|
||||
|
||||
* 51138: Functions/VCS_Info/Backends/VCS_INFO_get_data_git:
|
||||
Updated StGit patch detection in vcs_info
|
||||
|
||||
2022-12-06 Bart Schaefer <schaefer@zsh.org>
|
||||
|
||||
* Shohei YOSHIDA: 51108: Completion/Unix/Command/_nkf: single
|
||||
|
|
|
@ -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
|
||||
|
@ -389,6 +382,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 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 2>/dev/null)"})
|
||||
fi
|
||||
VCS_INFO_git_handle_patches
|
||||
else
|
||||
gitmisc=''
|
||||
fi
|
||||
|
|
Loading…
Reference in a new issue