diff options
author | Daniel Shahaf <d.s@daniel.shahaf.name> | 2018-10-02 15:20:54 +0000 |
---|---|---|
committer | Daniel Shahaf <d.s@daniel.shahaf.name> | 2018-10-07 15:05:19 +0000 |
commit | 5c9ef1a1faf42136ce330aa6f8e2123e83497239 (patch) | |
tree | e074a201175cb92d2b780fa6939a638d8ab77dac /Functions | |
parent | 0c00eed4c77aee7af64e9272bfd1cddb8663e477 (diff) | |
download | zsh-5c9ef1a1faf42136ce330aa6f8e2123e83497239.tar.gz zsh-5c9ef1a1faf42136ce330aa6f8e2123e83497239.tar.xz 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')
-rw-r--r-- | Functions/VCS_Info/Backends/VCS_INFO_get_data_git | 19 |
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 |