From: Daniel Shahaf <d.s@daniel.shahaf.name>
To: zsh-workers@zsh.org
Subject: __git_recent_commits cannot be called twice Re: [PATCH 2/5] _git: Offer @~$n as completion of recent commits.
Date: Sat, 31 Oct 2015 12:55:06 +0000 [thread overview]
Message-ID: <20151031125127.GA2360@tarsus.local2> (raw)
In-Reply-To: <20151025183458.GK11372@tarsus.local2>
Daniel Shahaf wrote on Sun, Oct 25, 2015 at 18:34:58 +0000:
> Suggested-by: Oliver Kiddle (users/20705)
> ---
> Output after the first two patches:
>
> % git commit --fixup=<TAB>
> ed49c5f @~0 - [HEAD] _git: Offer @~$n as completion of recent commits. (2 minutes ago)
> ⋮
> 2685bbc @~6 - [HEAD~6] Merge branch 'master' of git://git.code.sf.net/p/zsh/code (15 hours ago)
> 506d592 @~7 - [HEAD~7] 36943: restore scan for reclaimable blocks in freeheap() (15 hours ago)
> e3c6845 - [e3c6845] unposted: _beep completion: Actually hook it for the 'beep' command. (15 hours ago)
> 779b311 - [779b311] 36913 + 36945: vcs_info quilt: Pass patch subject lines to gen-applied-string (15 hours ago)
> c62db9e - [c62db9e] 36912: vcs_info quilt: Tolerate being in child of .pc's parent (15 hours ago)
> 272119b @~8 - [HEAD~8] unposted: small typo again (16 hours ago)
> c8c42d6 @~9 - [HEAD~9] unposted: small typo (16 hours ago)
The new output works fine in 'git commit --fixup=<TAB>', but not in 'git
show <TAB>'. This is because the latter calls __git_recent_commits via
two distinct codepaths. Here's a minimal example:
1 % autoload -Uz compinit
2 % compinit
3 % git <TAB><Esc>
4 % cd $(mktemp -d)
5 % git init && git commit -mm --allow-empty
6 Initialized empty Git repository in /tmp/tmp.Y5qmiIcfSX/.git/
7 [master (root-commit) 9b99116] m
8 % _f() { repeat 1 __git_recent_commits }
9 % compdef _f f
✓ 10 % f <TAB>
11 HEAD master
12 9b99116 @~0 -- [HEAD] m (4 seconds ago)
13 % _f() { repeat 2 __git_recent_commits }
14 % compdef _f f
✗ 15 % f <TAB>
16 HEAD master
17 9b99116
18 @~0
19 -- [HEAD] m (25 seconds ago)
20 9b99116
21 @~0
22 -- [HEAD] m (25 seconds ago)
A workaround is to disable the list-grouped style:
23 % zstyle :completion::complete:f::commits list-grouped false
✓ 24 % f <TAB>
25 HEAD master
26 @~0 -- [HEAD] m (71 seconds ago)
27 5d97266 -- [HEAD] m (71 seconds ago)
This is only a workaround because grouping @~0 and 5d97266 is desirable,
since they both refer to the same commit.
I can't fix this issue properly right now, so I'll revert 36959 until
a fix can be made:
diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git
index ad1037e..dc9c296 100644
--- a/Completion/Unix/Command/_git
+++ b/Completion/Unix/Command/_git
@@ -5696,7 +5696,10 @@ __git_recent_commits () {
else
label="[HEAD~$distance_from_head]"
fi
- descr+=("@~${distance_from_head}":"${label} $k") # CROSSREF: use the same label as below
+ ## Disabled because _describe renders the output unhelpfuly when this function
+ ## is called twice during a single completion operation, and list-grouped is
+ ## in its default setting (enabled).
+ #descr+=("@~${distance_from_head}":"${label} $k") # CROSSREF: use the same label as below
# Prepare for the next first-parent-ancestry commit.
(( ++distance_from_head ))
The underlying problematic behaviour is reproducible without _git:
1 $ zsh -f
2 % _f() { local -a x=(foo:aaa bar:aaa); repeat 2 _describe -tt 'desc' x }
3 % compdef _f f
4 % f
5 bar
6 foo
7 -- aaa
8 bar
9 foo
10 -- aaa
Basically, __git_recent_commits should disable the "Print descriptions one per line,
above the candidate completion" behaviour of _describe (which, IIRC, is
ultimately implemented by the "-E" flag passed to compadd from the 'case
CRT_EXPL' block in bin_compdescribe().)
Help with any of this will be welcome.
Daniel
next prev parent reply other threads:[~2015-10-31 13:02 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-25 18:34 Daniel Shahaf
2015-10-31 12:55 ` Daniel Shahaf [this message]
2015-10-31 20:24 ` __git_recent_commits cannot be called twice " Oliver Kiddle
2015-11-03 13:42 ` Daniel Shahaf
2015-11-13 19:11 ` Daniel Shahaf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151031125127.GA2360@tarsus.local2 \
--to=d.s@daniel.shahaf.name \
--cc=zsh-workers@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).