From d13d6afb2e788fac8eefeff47e889a54498eea9a Mon Sep 17 00:00:00 2001 From: Daniel Shahaf Date: Thu, 26 Mar 2020 02:43:41 +0000 Subject: 45627: vcs_info git: Under git-am(1) conflicts, pass to the gen-applied-string hook information on already-applied patches. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The hook already receives information about the current (topmost applied) patch and, if the get-unapplied style is set, about future (unapplied) patches. Tested in the Functions/VCS_Info/test-repo-git-rebase-apply scenario, after manually converting the rebase to a «git am». (Specifically, I ran: mkdir d git rebase --abort git format-patch rebase_from_this..HEAD -o d git checkout rebase_onto_this git am d/* .) --- Functions/VCS_Info/Backends/VCS_INFO_get_data_git | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'Functions') diff --git a/Functions/VCS_Info/Backends/VCS_INFO_get_data_git b/Functions/VCS_Info/Backends/VCS_INFO_get_data_git index 2b1e9afca..2b2040c94 100644 --- a/Functions/VCS_Info/Backends/VCS_INFO_get_data_git +++ b/Functions/VCS_Info/Backends/VCS_INFO_get_data_git @@ -258,14 +258,14 @@ elif [[ -d "${gitdir}/rebase-merge" ]]; then fi VCS_INFO_git_handle_patches elif [[ -d "${gitdir}/rebase-apply" ]]; then - # 'git rebase' without -i + # 'git rebase' without -i, or 'git am' 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 patches "before" the current patch + # Compute patch names for patches "before" the current patch if [[ -r ${patchdir}/rewritten ]]; then if zstyle -t ":vcs_info:${vcs}:${usercontext}:${rrn}" use-simple; then git_patches_applied=( ${${(f)"$(<${patchdir}/rewritten)"}// */' ?'} ) @@ -280,7 +280,13 @@ elif [[ -d "${gitdir}/rebase-apply" ]]; then # of these versions have original-commit and orig-head and would # take the 'if' branch, rather than this 'else' branch. for ((p = 1; p < cur; p++)); do - printf -v "git_patches_applied[$p]" "%04d ?" "$p" + printf -v this_patch_file "%s/%04d" "${patchdir}" "${p}" + if [[ -f $this_patch_file ]]; then + VCS_INFO_patch2subject "${this_patch_file}" + git_patches_applied+=( "$p $REPLY" ) + else + git_patches_applied+=( "$p ?" ) + fi done fi # Set $subject to the info for the current patch @@ -298,6 +304,8 @@ elif [[ -d "${gitdir}/rebase-apply" ]]; then subject=${subject:-'?'} if [[ -f "${patchdir}/original-commit" ]]; then git_patches_applied+=("$(< ${patchdir}/original-commit) $subject") + elif [[ -f "${patchdir}/next" ]]; then + git_patches_applied+=("$(< ${patchdir}/next) $subject") else git_patches_applied+=("? $subject") fi -- cgit 1.4.1