Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

[PATCH] _git: Fix __git_recent_branches for case when commit has empty message

Although I don't think anyone sane would ever do that, but I happened to
create one on in my local repo, and, curiously, zsh git completion

Pressing "Tab" after entering "git checkout " will cause the completion
script to crash with the following error:

    __git_recent_branches:21: bad set of key/value pairs for associative array

This error happens when an associative array is assigned odd number of
elements. Unless the variable being split is inside double quotes, empty
elements are removed (which is what causes the problem).

This commit fixes it.

Since --format=%(refname)%00%(subject)%00 appends null byte to every line,
using this format would cause an extra empty element appear, breaking the
assigment again. In order to fix this, I removed the trailing null byte
from the format string, and replaced newlines separating entries with
null byte (they were previously removed). Since neither refname nor
subject appears to be capable of containing newlines, this change should
be safe.
 Completion/Unix/Command/_git | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git
index ba1852699..97ab26512 100644
--- a/Completion/Unix/Command/_git
+++ b/Completion/Unix/Command/_git
@@ -6662,8 +6662,8 @@ __git_recent_branches() {
   # 4. Obtain log messages for all of them in one shot.
   # TODO: we'd really like --sort=none here...  but git doesn't support such a thing.
-  # The \n removal is because for-each-ref prints a \n after each entry.
-  descriptions=( ${(0)"$(_call_program all-descriptions "git --no-pager for-each-ref --format='%(refname)%00%(subject)%00'" refs/heads/${(q)^branches} "--")"//$'\n'} )
+  local z=$'\0'
+  descriptions=( "${(0)"$(_call_program all-descriptions "git --no-pager for-each-ref --format='%(refname)%00%(subject)'" refs/heads/${(q)^branches} "--")"//$'\n'/$z}" )
   # 5. Synthesize the data structure _describe wants.
   local -a branches_colon_descriptions

Messages sorted by: Reverse Date, Date, Thread, Author