Re: [PATCH 00/11] completion: general cleanups
- From
Felipe Contreras <felipe.contreras@gmail.com>
- Date
- Apr 27, 2013, 19:43 UTC
- Message-ID
- <CAMP44s10Uv-n2rBLPS-uYpZBoyZDCjQ_hRA2q=zf1WC4S=ac6g@mail.gmail.com>
- In-Reply-To
- <CAMP44s32WrnFr9Lp03Wu8gC6=FaACBtDbi1rnu=bo94Aa73TBA@mail.gmail.com>
On Sat, Apr 27, 2013 at 2:15 PM, Felipe Contreras <felipe.contreras@gmail.com> wrote:
Show 67 quoted lines
> On Sat, Apr 27, 2013 at 10:40 AM, Manlio Perillo
> <manlio.perillo@gmail.com> wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Il 27/04/2013 15:07, Felipe Contreras ha scritto:
>>> [...]
>>> This should do the trick. No?
>>>
>>> --- a/contrib/completion/git-completion.bash
>>> +++ b/contrib/completion/git-completion.bash
>>> @@ -262,16 +262,17 @@ __git_ls_files_helper ()
>>> # If provided, only files within the specified directory are listed.
>>> # Sub directories are never recursed. Path must have a trailing
>>> # slash.
>>> +# 3. Compat mode; set to enable.
>>> __git_index_files ()
>>> {
>>> - local dir="$(__gitdir)" root="${2-.}" file
>>> + local dir="$(__gitdir)" root="${2-.}" file old="${3-}"
>>>
>>> if [ -d "$dir" ]; then
>>> __git_ls_files_helper "$root" "$1" |
>>> while read -r file; do
>>> case "$file" in
>>> - ?*/*) echo "${file%%/*}/" ;;
>>> - *) echo "$file " ;;
>>> + ?*/*) echo "${file%%/*}${old:+/}" ;;
>>> + *) echo "${file}${old:+ }" ;;
>>> esac
>>> done | sort | uniq
>>> fi
>>> @@ -480,7 +481,7 @@ __git_complete_revlist_file ()
>>> # The exception is --committable, which finds the files appropriate commit.
>>> __git_complete_index_file ()
>>> {
>>> - local pfx="" cur_="$cur"
>>> + local pfx="" cur_="$cur" old
>>>
>>> case "$cur_" in
>>> ?*/*)
>>> @@ -490,7 +491,8 @@ __git_complete_index_file ()
>>> ;;
>>> esac
>>>
>>> - __gitcomp_nl "$(__git_index_files "$1" "$pfx")" "$pfx" "$cur_" ""
>>> + compopt -o filenames +o nospace 2> /dev/null || old=1
>>> + __gitcomp_nl "$(__git_index_files "$1" "$pfx" "$old")" "$pfx" "$cur_" ""
>>> }
>>>
>>> __git_complete_file ()
>>>
>>
>> I like the idea (but I have not tested it), however compopt is called
>> two times, for each completion.
>
> Why two times?
>
>> Maybe we can test for `-o filenames` support when script is loaded,
>> where currently there is a Bash version check, and set a global variable?
>
> Yeah, that's the way bash-completion used to do it. But I wonder if we
> should be worrying about this at this point, even bash-completion
> dropped support for bash < 4 more than two years ago, and even debian
> stable is at 4.1.
>
> http://anonscm.debian.org/gitweb/?p=bash-completion/bash-completion.git;a=commitdiff;h=f1b3be235722d1ea51160acf50120eb88995a5b7Actually, there's a way to trigger this in bash < 4, I've tested it and it works:
--- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -270,8 +270,8 @@ __git_index_files () __git_ls_files_helper "$root" "$1" | while read -r file; do case "$file" in - ?*/*) echo "${file%%/*}/" ;; - *) echo "$file " ;; + ?*/*) echo "${file%%/*}" ;; + *) echo "${file}" ;; esac done | sort | uniq fi @@ -490,6 +490,10 @@ __git_complete_index_file () ;; esac + # use a hack to enable file mode in bash < 4 + compopt -o filenames +o nospace 2> /dev/null || + compgen -f /non-existing-dir/ > /dev/null + __gitcomp_nl "$(__git_index_files "$1" "$pfx")" "$pfx" "$cur_" "" }
-- Felipe Contreras