git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Marc Khouzam <marc.khouzam@gmail.com>
To: "SZEDER Gábor" <szeder@ira.uka.de>
Cc: git@vger.kernel.org, felipe.contreras@gmail.com
Subject: Re: Fwd: [PATCH] Add tcsh-completion support to contrib by using git-completion.bash
Date: Tue, 13 Nov 2012 15:12:44 -0500	[thread overview]
Message-ID: <CAFj1UpGxx_9GHSnJRpe8hDGB6OTio1mcN71LKcR0pxhSVx2xDw@mail.gmail.com> (raw)
In-Reply-To: <20121113111448.GA3817@goldbirke>

Thanks for the review.

On Tue, Nov 13, 2012 at 6:14 AM, SZEDER Gábor <szeder@ira.uka.de> wrote:
> Hi,
>
> On Mon, Nov 12, 2012 at 03:07:46PM -0500, Marc Khouzam wrote:
>> Hi,
>
> [...]
>
>> Signed-off-by: Marc Khouzam <marc.khouzam@gmail.com>
>
> [...]
>
>> Thanks
>>
>> Marc
>>
>> ---
>>  contrib/completion/git-completion.bash |   53 +++++++++++++++++++++++++++++++-
>>  contrib/completion/git-completion.tcsh |   34 ++++++++++++++++++++
>>  2 files changed, 86 insertions(+), 1 deletions(-)
>>  create mode 100755 contrib/completion/git-completion.tcsh
>
> Please have a look at Documentation/SubmittingPatches to see how to
> properly format the commit message, i.e. no greeting and sign-off in
> the commit message part, and the S-o-b line should be the last before
> the '---'.

Sorry about that, since I should have noticed it in the doc.
I will do my best to address all submission issues mentioned
when I post the next version of the patch.

> Your patch seems to be severely line-wrapped.  That document also
> contains a few MUA-specific tips to help avoid that.
>
> Other than that, it's a good description of the changes and
> considerations.  I agree that this approach seems to be the best from
> the three.
>
>> diff --git a/contrib/completion/git-completion.bash
>> b/contrib/completion/git-completion.bash
>> index be800e0..6d4b57a 100644
>> --- a/contrib/completion/git-completion.bash
>> +++ b/contrib/completion/git-completion.bash
>> @@ -1,4 +1,6 @@
>> -#!bash
>> +#!/bin/bash
>> +# The above line is important as this script can be executed when used
>> +# with another shell such as tcsh
>
> See comment near the end.

Great suggestion below.  I removed the above change.

>> +       # Set COMP_WORDS to the command-line as bash would.
>> +       COMP_WORDS=($1)
>
> That comment is only true for older Bash versions.  Since v4 Bash
> splits the command line at characters that the readline library treats
> as word separators when performing word completion.  But the
> completion script has functions to deal with both, so this shouldn't
> be a problem.

I've updated the comment to be more general and left the code
the same since it is supported by the script.

>
>> +       # Print the result that is stored in the bash variable ${COMPREPLY}
>
> Really? ;)

Removed :)

>> +       for i in ${COMPREPLY[@]}; do
>> +               echo "$i"
>> +       done
>
> There is no need for the loop here to print the array one element per
> line:
>
>         local IFS=$'\n'
>         echo "${COMPREPLY[*]}"

Better.  Thanks.

>> +if [ -n "$1" ] ; then
>> +  # If there is an argument, we know the script is being executed
>> +  # so go ahead and run the _git_complete_with_output function
>> +  _git_complete_with_output "$1" "$2"
>
> Where does the second argument come from?  Below you run this script
> as '${__git_tcsh_completion_script} "${COMMAND_LINE}"', i.e. $2 is
> never set.  Am I missing something?

This second argument is optional and, if present, will be put in
$COMP_CWORD.  If not present, $COMP_CWORD must be computed
from $1.  Also see comment above _git_complete_with_output ().
tcsh does not provide me with this information, so I cannot make use of it.
However, I thought it would be more future-proof to allow it for other shells
which may have that information.

It is not necessary for tcsh, so I can remove if you prefer?

>> +# Make the script executable if it is not
>> +if ( ! -x ${__git_tcsh_completion_script} ) then
>> +       chmod u+x ${__git_tcsh_completion_script}
>> +endif
>
> Not sure about this.  If I source a script to provide completion for a
> command, then I definitely don't expect it to change file permissions.
>
> However, even if the git completion script is not executable, you can
> still run it with 'bash ${__git_tcsh_completion_script}'.  This way
> neither the user would need to set permissions, not the script would
> need to set it behind the users back.  Furthermore, this would also
> make changing the shebang line unnecessary.

Very nice!  Done.

>> +complete git  'p/*/`${__git_tcsh_completion_script} "${COMMAND_LINE}"
>> | sort | uniq`/'
>> +complete gitk 'p/*/`${__git_tcsh_completion_script} "${COMMAND_LINE}"
>> | sort | uniq`/'
>
> Is the 'sort | uniq' really necessary?  After the completion function
> returns Bash automatically sorts the elements in COMPREPLY and removes
> any duplicates.  Doesn't tcsh do the same?  I have no idea about tcsh
> completion.

On my machine, tcsh does not remove duplicates.  It does sort the results
but that is done after I've run 'uniq', which is too late.  I'm not
happy about this
either, but the other option is to improve git-completion.bash to
avoid duplicates,
which seemed less justified.

> Does the git completion script returns any duplicates at all?

It does.  'help' is returned twice for example.
Also, when completing 'git checkout ' in the git repo, I can see multiple
'todo' branches, as well as 'master', 'pu', 'next', etc.

You can actually try it without tcsh by running my proposed version of
git-completion.bash like this:

cd git/contrib/completion
bash git-completion.bash "git checkout " | sort | uniq --repeated

> Ambigious refs come to mind, but I just checked that refs completion,
> or rather 'git for-each-ref' (the command driving refs completion), is
> kind enough to make any ambigious ref names unique (i.e. a branch and
> a tag with the same name is listed as 'heads/name' and 'tags/name').

I will post a new version of the patch after looking at Felipe's patch for zsh,
which I was not aware of.

Thanks!

Marc

  reply	other threads:[~2012-11-13 20:13 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CAFj1UpE6OtJEojaED1_DZJD0kU=nVsFE_w8xa0oJE-6auCU2rw@mail.gmail.com>
2012-11-12 20:07 ` Fwd: [PATCH] Add tcsh-completion support to contrib by using git-completion.bash Marc Khouzam
2012-11-13 11:14   ` SZEDER Gábor
2012-11-13 20:12     ` Marc Khouzam [this message]
2012-11-13 23:46       ` SZEDER Gábor
2012-11-14  0:49         ` [PATCH] completion: remove 'help' duplicate from porcelain commands SZEDER Gábor
2012-11-14  4:26         ` Fwd: [PATCH] Add tcsh-completion support to contrib by using git-completion.bash Marc Khouzam
2012-11-15 11:51           ` [PATCH] tcsh-completion re-using git-completion.bash Marc Khouzam
2012-11-16  1:41             ` Felipe Contreras
2012-11-16 14:39               ` Marc Khouzam
2012-11-16 15:33                 ` Felipe Contreras
2012-11-16 15:48                   ` Marc Khouzam
2012-11-16 16:12                     ` [PATCH v3] " Marc Khouzam
2012-11-16 17:21                       ` Felipe Contreras
2012-11-16 18:43                         ` [PATCH v4] " Marc Khouzam
2012-11-16 19:59                           ` Junio C Hamano
2012-11-16 20:01                             ` Felipe Contreras
2012-11-16 17:18                     ` [PATCH] " Felipe Contreras
2012-11-16 18:20                       ` Marc Khouzam
2012-11-16 20:04                         ` Felipe Contreras
2012-11-16 20:40                           ` SZEDER Gábor
2012-11-16 21:03                             ` Felipe Contreras
2012-11-16 21:22                               ` SZEDER Gábor
2012-11-16 21:46                                 ` Felipe Contreras
2012-11-17 10:56                                   ` SZEDER Gábor
2012-11-17 11:46                                     ` Felipe Contreras
2012-11-17 14:17                                       ` SZEDER Gábor
2012-11-16 21:20                             ` Junio C Hamano
2012-11-16 21:56                               ` Felipe Contreras
2012-11-17 17:15                                 ` Marc Khouzam
2012-11-17 18:01                                   ` Felipe Contreras
2012-11-20 14:58                                     ` Marc Khouzam
2012-11-20 15:15                                       ` Felipe Contreras
2012-11-20 18:20                                         ` Marc Khouzam
2012-11-20 21:07                                           ` Junio C Hamano
2012-11-13 18:31   ` [PATCH] Add tcsh-completion support to contrib by using git-completion.bash Felipe Contreras
2012-11-14  0:11     ` SZEDER Gábor
2012-11-15  2:40       ` Felipe Contreras
2012-11-14  3:36     ` Marc Khouzam
2012-11-14  0:09   ` Fwd: " SZEDER Gábor

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAFj1UpGxx_9GHSnJRpe8hDGB6OTio1mcN71LKcR0pxhSVx2xDw@mail.gmail.com \
    --to=marc.khouzam@gmail.com \
    --cc=felipe.contreras@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=szeder@ira.uka.de \
    /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://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).