From 5c9ef1a1faf42136ce330aa6f8e2123e83497239 Mon Sep 17 00:00:00 2001 From: Daniel Shahaf Date: Tue, 2 Oct 2018 15:20:54 +0000 Subject: 43587: vcs_info git: In 'git rebase -i', when computing subjects of applied-patches, handle an edge case where the subject is not available. --- ChangeLog | 5 +++++ Functions/VCS_Info/Backends/VCS_INFO_get_data_git | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/ChangeLog b/ChangeLog index f6d0af294..af9107e62 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2018-10-07 Daniel Shahaf + * 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 -- cgit 1.4.1