summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Doc/Zsh/contrib.yo4
-rw-r--r--Functions/VCS_Info/Backends/VCS_INFO_get_data_git31
3 files changed, 32 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 4687c2212..edf814dd9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/Doc/Zsh/contrib.yo b/Doc/Zsh/contrib.yo
index c6bf745b7..0909cd4f5 100644
--- a/Doc/Zsh/contrib.yo
+++ b/Doc/Zsh/contrib.yo
@@ -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()
diff --git a/Functions/VCS_Info/Backends/VCS_INFO_get_data_git b/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
index f7c4210e8..97a04b6ce 100644
--- a/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
+++ b/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
@@ -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