summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Functions/VCS_Info/Backends/VCS_INFO_get_data_git19
2 files changed, 24 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index f6d0af294..af9107e62 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2018-10-07 Daniel Shahaf <d.s@daniel.shahaf.name>
+ * 43587: Functions/VCS_Info/Backends/VCS_INFO_get_data_git:
+ vcs_info git: In 'git rebase -i', when computing subjects
+ of applied-patches, handle an edge case where the subject is
+ not available.
+
* 43588: Functions/VCS_Info/Backends/VCS_INFO_get_data_git:
vcs_info git: Make sure applied-patches is of the form "$hash
$subject" --- that is, has a space and a non-empty second
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