help / color / Atom feed
* [PATCH] _git: Fix __git_recent_branches for case when commit has empty message
@ 2020-01-31 16:57 WGH
  2020-02-01  0:09 ` Daniel Shahaf
  0 siblings, 1 reply; 4+ messages in thread
From: WGH @ 2020-01-31 16:57 UTC (permalink / raw)
  To: zsh-workers

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

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, back to index

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-31 16:57 [PATCH] _git: Fix __git_recent_branches for case when commit has empty message WGH
2020-02-01  0:09 ` Daniel Shahaf
2020-02-01 23:50   ` WGH
2020-02-02  7:34     ` Daniel Shahaf


Archives are clonable: git clone --mirror http://inbox.vuxu.org/zsh-workers

Example config snippet for mirrors

Newsgroup available over NNTP:

AGPL code for this site: git clone https://public-inbox.org/public-inbox.git