1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-01-01 05:16:05 +01:00

45540: vcs_info git: In non-interactive rebases, compute patch names for unapplied patches.

This commit is contained in:
Daniel Shahaf 2020-03-12 18:06:21 +00:00
parent 5a1f5cf8ab
commit e1946bacf8
3 changed files with 32 additions and 8 deletions

View file

@ -1,5 +1,10 @@
2020-03-15 Daniel Shahaf <danielsh@apache.org>
* 45540: Doc/Zsh/contrib.yo,
Functions/VCS_Info/Backends/VCS_INFO_get_data_git: vcs_info git:
In non-interactive rebases, compute patch names for unapplied
patches.
* 45543: Functions/VCS_Info/VCS_INFO_quilt, README: vcs_info
quilt: Allow quiltcommand to be a function.

View file

@ -1177,7 +1177,7 @@ If there are two different ways of gathering
information, you can select the simpler one by setting this style to true;
the default is to use the not-that-simple code, which is potentially a lot
slower but might be more accurate in all possible cases. This style is
used by the tt(bzr) and tt(hg) backends. In the case of tt(hg) it will invoke
used by the tt(bzr), tt(hg), and tt(git) backends. In the case of tt(hg) it will invoke
the external hexdump program to parse the binary dirstate cache file; this
method will not return the local revision number.
)
@ -1236,7 +1236,7 @@ item(tt(get-unapplied))(
This boolean style controls whether a backend should attempt to gather a list
of unapplied patches (for example with Mercurial Queue patches).
Used by the tt(quilt) and tt(hg) backends.
Used by the tt(quilt), tt(hg), and tt(git) backends.
)
enditem()

View file

@ -261,17 +261,20 @@ elif [[ -d "${gitdir}/rebase-apply" ]]; then
# 'git rebase' without -i
patchdir="${gitdir}/rebase-apply"
local next="${patchdir}/next"
local this_patch_file
if [[ -f $next ]]; then
local cur=$(< $next)
local p subject
# Fake patch names for all but current patch
# Fake patch names for patches "before" the current patch
#
# Note: With git 2.24, (( cur == 1 )), so the loop body never runs.
for ((p = 1; p < cur; p++)); do
printf -v "git_patches_applied[$p]" "%04d ?" "$p"
done
# Set $subject to the info for the current patch
if [[ -f "${patchdir}/msg-clean" ]]; then
subject="${$(< "${patchdir}/msg-clean")[(f)1]}"
elif local this_patch_file
printf -v this_patch_file "%s/%04d" "${patchdir}" "${cur}"
elif printf -v this_patch_file "%s/%04d" "${patchdir}" "${cur}"
[[ -f $this_patch_file ]]
then
() {
@ -286,11 +289,27 @@ elif [[ -d "${gitdir}/rebase-apply" ]]; then
else
git_patches_applied+=("? $subject")
fi
local last="$(< "${patchdir}/last")"
if (( cur+1 <= last )); then
git_patches_unapplied=( {$((cur+1))..$last} )
# Handle patches scheduled for after the current patch, if instructed to.
if zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" get-unapplied; then
local last="$(< "${patchdir}/last")"
if [[ -r ${patchdir}/original-commit && -r ${patchdir}/orig-head ]] &&
! zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" use-simple
then
git_patches_unapplied+=( ${(f)"$(${vcs_comm[cmd]} log --reverse --pretty="%h %s" "$(<${patchdir}/original-commit)..$(<${patchdir}/orig-head)")"} )
else
for ((p = cur+1; p <= last; p++)); do
printf -v this_patch_file "%s/%04d" "${patchdir}" "${p}"
if [[ -f $this_patch_file ]]; then
VCS_INFO_patch2subject "${this_patch_file}"
git_patches_unapplied+=( "$p $REPLY" )
else
git_patches_unapplied+=( "$p ?" )
fi
done
fi
fi
fi
unset this_patch_file
VCS_INFO_git_handle_patches
elif [[ -f "${gitdir}/MERGE_HEAD" ]]; then