threads / discuss / 32606

How to setup bash completion for alias of git command

Subject: How to setup bash completion for alias of git command

## tl;dr

4 messages between Jan 12, 2013 and Jan 21, 2013.

replies: 3people: 2as markdown or json

Ping Yin· Jan 12, 2013, 14:30 UTC · lore
Following setup works for me  in ubuntu (10.04,11.04) for a long time

alias gtlg='git log' complete -o default -o nospace -F _git_log gtlg

However, in debian (testing, wheezy), it doesn't work

$ gtlg or<TAB> gtlg or-bash: [: 1: unary operator expected -bash: [: 1: unary operator expected

$ git --version git version 1.7.10

Can anybody help?
Ping Yin· Jan 13, 2013, 03:13 UTC · re: Ping Yin · lore

Re: How to setup bash completion for alias of git command

On Sat, Jan 12, 2013 at 10:30 PM, Ping Yin <pkufranky@gmail.com> wrote:
Show 11 quoted lines
> Following setup works for me  in ubuntu (10.04,11.04) for a long time
>
> alias gtlg='git log'
> complete -o default -o nospace -F _git_log gtlg
>
> However, in debian (testing, wheezy), it doesn't work
>
> $ gtlg or<TAB>
> gtlg or-bash: [: 1: unary operator expected
> -bash: [: 1: unary operator expected
>
with newest git version built with next branch, the same problem remains.
Ping Yin
Jonathan Nieder· Jan 20, 2013, 11:14 UTC · re: Ping Yin · lore

Re: How to setup bash completion for alias of git command

Hi Ping,
Ping Yin wrote:
Show 10 quoted lines
> Following setup works for me  in ubuntu (10.04,11.04) for a long time
>
> alias gtlg='git log'
> complete -o default -o nospace -F _git_log gtlg
>
> However, in debian (testing, wheezy), it doesn't work
>
> $ gtlg or<TAB>
> gtlg or-bash: [: 1: unary operator expected
> -bash: [: 1: unary operator expected

Yes, I can reproduce this. "git bisect" tells me it was introduced by v1.7.6-rc0~65^2~4 (completion: remove unnecessary _get_comp_words_by_ref() invocations, 2011-04-28). Since then, Felipe has done work to make reusing subcommand completion easy again, so you can do

	__git_complete gtlg _git_log

One complication: on some systems, including Ubuntu 13.04, git's bash completion script is installed to

	/usr/share/bash-completion/completions/git

and sourced on the fly when completing commands starting with "git" instead of right away from /etc/bash_completion. On these systems, the "__git_complete" function would not be usable right away from your .bashrc file. I think we should fix this, for example by moving the function to a separate

	$(git --exec-path)/git-bashrc-functions
library.

Thanks for reporting, Jonathan

Ping Yin· Jan 21, 2013, 03:55 UTC · re: Jonathan Nieder · lore

Re: How to setup bash completion for alias of git command

On Sun, Jan 20, 2013 at 7:14 PM, Jonathan Nieder <jrnieder@gmail.com> wrote:
Show 18 quoted lines
> Hi Ping,
>
> Ping Yin wrote:
>>
>> However, in debian (testing, wheezy), it doesn't work
>>
>> $ gtlg or<TAB>
>> gtlg or-bash: [: 1: unary operator expected
>> -bash: [: 1: unary operator expected
>
> Yes, I can reproduce this.  "git bisect" tells me it was introduced
> by v1.7.6-rc0~65^2~4 (completion: remove unnecessary
> _get_comp_words_by_ref() invocations, 2011-04-28).  Since then, Felipe
> has done work to make reusing subcommand completion easy again, so you
> can do
>
>         __git_complete gtlg _git_log
>
Thanks very much. by following your advice, it works now.
Ping Yin

← back to recent threads