From: Peter Stephenson <p.stephenson@samsung.com>
To: Zsh Hackers' List <zsh-workers@zsh.org>
Subject: Re: git commit descriptions
Date: Wed, 04 Nov 2015 17:15:26 +0000 [thread overview]
Message-ID: <20151104171526.23978d9f@pwslap01u.europe.root.pri> (raw)
In-Reply-To: <20151013111001.20a547d5@pwslap01u.europe.root.pri>
On Tue, 13 Oct 2015 11:10:01 +0100
Peter Stephenson <p.stephenson@samsung.com> wrote:
> Next bit of git completion output usability.
>
> Sometimes it would be useful to get a one-line summary of the
> commit corresponding to what you're about to e.g. checkout. I have lots
> of similarly named branches and seeing the commit at the head of each
> branch would help me work out which one I want to checkout.
I'm going to commit this in its latest form, below, even though I don't
think it's the final word on the subject. It has no effect unless you
set the style max-verbose. The reasons for committing it are (i) it
encapsulates the mechanism for verbose descriptions which can be used
whatever the final solution is (ii) I'm using it anyway (iii) it's more
useful if it keeps getting updated as part of the script in the
repository even if it's not final (iv) it allows other people to play
with logic for getting verbose descriptions.
pws
diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git
index df7a7d9..61386bf 100644
--- a/Completion/Unix/Command/_git
+++ b/Completion/Unix/Command/_git
@@ -5004,6 +5004,33 @@ __git_is_in_middle_of_merge () {
[[ -f $gitdir/MERGE_HEAD ]]
}
+(( $+functions[__git_describe_branch] )) ||
+__git_describe_branch () {
+ local __commits_in=$1
+ local __tag=$2
+ local __desc=$3
+ shift 3
+
+ integer maxverbose
+ if zstyle -s :completion:$curcontext max-verbose maxverbose &&
+ (( ${compstate[nmatches]} <= maxverbose )); then
+ local __c
+ local -a __commits
+ for __c in ${(P)__commits_in}; do
+ __commits+=("${__c}:${$(_call_program describe git log -1 --oneline $__c)//:/\\:}")
+ done
+ _describe -t $__tag $__desc __commits "$@"
+ else
+ local expl
+ _wanted $__tag expl $__desc compadd "$@" -a - $__commits_in
+ fi
+}
+
+(( $+functions[__git_describe_commit] )) ||
+__git_describe_commit () {
+ __git_describe_branch $1 $2 $3 -M 'r:|/=**' "${(@)argv[4,-1]}"
+}
+
# Completion Wrappers
(( $+functions[__git_ignore_line] )) ||
@@ -5541,29 +5568,27 @@ __git_branch_names () {
branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads 2>/dev/null)"}#refs/heads/})
__git_command_successful $pipestatus || return 1
- _wanted branch-names expl branch-name compadd -M 'r:|/=**' "$@" -a - branch_names
+ __git_describe_commit branch_names branch-names 'branch name' "$@"
}
(( $+functions[__git_remote_branch_names] )) ||
__git_remote_branch_names () {
- local expl
declare -a branch_names
branch_names=(${${(f)"$(_call_program remote-branch-refs git for-each-ref --format='"%(refname)"' refs/remotes 2>/dev/null)"}#refs/remotes/})
__git_command_successful $pipestatus || return 1
- _wanted remote-branch-names expl 'remote branch name' compadd -M 'r:|/=**' "$@" -a - branch_names
+ __git_describe_commit branch_names remote-branch-names 'remote branch name' "$@"
}
(( $+functions[__git_remote_branch_names_noprefix] )) ||
__git_remote_branch_names_noprefix () {
- local expl
declare -a heads
branch_names=(${${${${(f)"$(_call_program remote-branch-refs-noprefix git for-each-ref --format='"%(refname)"' refs/remotes 2>/dev/null)"}#refs/remotes/}#*/}:#HEAD})
__git_command_successful $pipestatus || return 1
- _wanted remote-branch-names-noprefix expl 'remote branch name' compadd -M 'r:|/=**' "$@" -a - branch_names
+ __git_describe_commit branch_names remote-branch-names-noprefix 'remote branch name' "$@"
}
(( $+functions[__git_commit_objects_prefer_recent] )) ||
@@ -5603,7 +5628,7 @@ __git_heads () {
(( $+functions[__git_heads_local] )) ||
__git_heads_local () {
- local gitdir expl start
+ local gitdir
declare -a heads
heads=(${(f)"$(_call_program headrefs git for-each-ref --format='"%(refname:short)" refs/heads' 2>/dev/null)"})
@@ -5615,17 +5640,16 @@ __git_heads_local () {
[[ -f $gitdir/refs/stash ]] && heads+=stash
fi
- _wanted heads-local expl "local head" compadd -M 'r:|/=**' "$@" -a - heads
+ __git_describe_commit heads heads-local "local head" "$@"
}
(( $+functions[__git_heads_remote] )) ||
__git_heads_remote () {
- local gitdir expl start
declare -a heads
heads=(${(f)"$(_call_program headrefs git for-each-ref --format='"%(refname:short)" refs/remotes' 2>/dev/null)"})
- _wanted heads-remote expl "remote head" compadd -M 'r:|/=**' "$@" -a - heads
+ __git_describe_commit heads heads-remote "remote head" "$@"
}
(( $+functions[__git_commit_objects] )) ||
prev parent reply other threads:[~2015-11-04 17:25 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-13 10:10 Peter Stephenson
2015-11-04 17:15 ` Peter Stephenson [this message]
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=20151104171526.23978d9f@pwslap01u.europe.root.pri \
--to=p.stephenson@samsung.com \
--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).