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

Re: Improved completion for git commit objects (__git_commit_objects)



Daniel Hahler wrote on Wed, Mar 04, 2015 at 00:46:42 +0100:
> First, I've also added __git_commits to _git-commit where relevant:
> 
> diff --git i/Completion/Unix/Command/_git w/Completion/Unix/Command/_git
> index 9552780..0bfa057 100644
> --- i/Completion/Unix/Command/_git
> +++ w/Completion/Unix/Command/_git
> @@ -647,8 +647,8 @@ _git-commit () {
>    # TODO: --interactive isn't explicitly listed in the documentation.
>    _arguments -w -S -s \
>      '(-a --all --interactive -o --only -i --include *)'{-a,--all}'[stage all modified and deleted paths]' \
> -    '--fixup=[construct a commit message for use with rebase --autosquash]:commit to be amended:' \
> -    '--squash=[construct a commit message for use with rebase --autosquash]:commit to be amended:' \
> +    '--fixup=[construct a commit message for use with rebase --autosquash]:commit to be amended:__git_commits' \
> +    '--squash=[construct a commit message for use with rebase --autosquash]:commit to be amended:__git_commits' \
>      $reset_author_opt \
>      '(        --porcelain --dry-run)--short[output dry run in short format]' \
>      '(--short             --dry-run)--porcelain[output dry run in porcelain-ready format]' \
> 

Looks like we could apply this part immediately, it isn't WIP like the
rest of your change.

> +  : ${(AA)commits::=${(f)"$(_call_program commits git --no-pager log --oneline -2 --format='%h%n%s')"}}

You can remove '--oneline': it has no effect since you use '--format' later.

>    _guard '[[:xdigit:]](#c,40)' 'commit object name'
> +
> +  : ${(AA)commits::=${(f)"$(_call_program commits git --no-pager log --oneline -2 --format='%h%n%s')"}}
> +  __git_command_successful $pipestatus || return 1
> +
> +  _wanted commits expl 'commit object name' compadd "$@" -k - commits && ret=0
>  }
> 
> I do not fully understand how "_guard" is meant to be used - I need to comment/remove it.
> Should this get chained, e.g. with "_wanted", instead?

What's the desired behaviour?  Suppose that ${(k)commits} is [0123abc,
4567def] and the user types '--fixup=fedbca<TAB>'.  In this case, you'd
still want the second argument to _guard to be displayed, right?

In this case, I think you should retain _guard in the "the 'commits' tag
is wanted, but none of ${(k)commits} matches the input so far" codepath.
Makes sense?

> As for using the commit objects in the completion, I would not like to have then for
> "git checkout <tab>" by default, but with "git commit --fixup=".
> With "git checkout", any partial matching commit objects should be completed though,
> and the list would be useful to have on second "<tab>".
> 
> What do you think?

Haven't tried the patch, but I like the idea of offering recent commits
as completions for --fixup.  I use --fixup regularly, and that's exactly
the completion offers I'd want.

Cheers,

Daniel



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