summaryrefslogtreecommitdiff
path: root/Functions/VCS_Info/Backends
diff options
context:
space:
mode:
authorDaniel Shahaf <d.s@daniel.shahaf.name>2018-10-02 15:20:54 +0000
committerDaniel Shahaf <d.s@daniel.shahaf.name>2018-10-07 15:05:19 +0000
commit5c9ef1a1faf42136ce330aa6f8e2123e83497239 (patch)
treee074a201175cb92d2b780fa6939a638d8ab77dac /Functions/VCS_Info/Backends
parent0c00eed4c77aee7af64e9272bfd1cddb8663e477 (diff)
downloadzsh-5c9ef1a1faf42136ce330aa6f8e2123e83497239.tar.gz
zsh-5c9ef1a1faf42136ce330aa6f8e2123e83497239.zip
43587: vcs_info git: In 'git rebase -i', when computing subjects of applied-patches, handle an edge case where the subject is not available.
Diffstat (limited to 'Functions/VCS_Info/Backends')
-rw-r--r--Functions/VCS_Info/Backends/VCS_INFO_get_data_git19
1 files changed, 19 insertions, 0 deletions
diff --git a/Functions/VCS_Info/Backends/VCS_INFO_get_data_git b/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
index 087a8a283..04d15bb4a 100644
--- a/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
+++ b/Functions/VCS_Info/Backends/VCS_INFO_get_data_git
@@ -196,6 +196,24 @@ elif [[ -d "${gitdir}/rebase-merge" ]]; then
# The line is of the form "pick $hash $subject".
# Just strip the verb and we're good to go.
p=${p#* }
+ # Special case: in an interactive rebase, if the user wrote "p $shorthash\n"
+ # in the editor (without a description after the hash), then the .../done
+ # file will contain "p $longhash $shorthash\n" (git 2.11.0) or "pick $longhash\n"
+ # (git 2.19.0).
+ if [[ $p != *\ * ]]; then
+ # The line is of the form "pick $longhash\n"
+ #
+ # Mark the log message subject as unknown.
+ # TODO: Can we performantly obtain the subject?
+ p+=" ?"
+ elif (( ${#${p//[^ ]}} == 1 )) && [[ ${p%% *} == ${p#* }* ]]; then
+ # The line is of the form "p $longhash $shorthash\n"
+ #
+ # The shorthash is superfluous, so discard it, and mark
+ # the log message subject as unknown.
+ # TODO: Can we performantly obtain the subject?
+ p="${p%% *} ?"
+ fi
;;
(x *)
# The line is of the form 'exec foo bar baz' where 'foo bar
@@ -212,6 +230,7 @@ elif [[ -d "${gitdir}/rebase-merge" ]]; then
git_patches_applied+=("$p")
done
if [[ -f "${patchdir}/git-rebase-todo" ]] ; then
+ # TODO: Process ${patchdir}/git-rebase-todo lines like ${patchdir}/done lines are
git_patches_unapplied=( ${${(f)${"$(<"${patchdir}/git-rebase-todo")"}}:#[#]*} )
fi
VCS_INFO_git_handle_patches