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 | |
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.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Functions/VCS_Info/Backends/VCS_INFO_get_data_git | 19 |
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 |