Re: [PATCH 00/11] completion: general cleanups

2013-04-27 Thread Manlio Perillo
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Il 27/04/2013 21:15, Felipe Contreras ha scritto:
> [...]
>>> @@ -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?

Ah, right; sorry.
I missed the fact that you are using __gitcomp_nl instead of my
__gitcomp_file.

> 
>> 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.
> 

I'm +0.

> [...]


Regards  Manlio
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAlF8MVsACgkQscQJ24LbaUSY/wCgkq8CQeVGNpZFtchiLAKXYpxS
wsAAnR0abrQzA1jW+Do7CSuJOZVMRuJu
=zPgk
-END PGP SIGNATURE-
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 00/11] completion: general cleanups

2013-04-27 Thread Felipe Contreras
On Sat, Apr 27, 2013 at 2:15 PM, Felipe Contreras
 wrote:
> On Sat, Apr 27, 2013 at 10:40 AM, Manlio Perillo
>  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=f1b3be235722d1ea51160acf50120eb88995a5b7

Actually, 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
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 00/11] completion: general cleanups

2013-04-27 Thread Felipe Contreras
On Sat, Apr 27, 2013 at 10:40 AM, Manlio Perillo
 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=f1b3be235722d1ea51160acf50120eb88995a5b7

Cheers.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 00/11] completion: general cleanups

2013-04-27 Thread Manlio Perillo
-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.

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?



Regards   Manlio
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAlF78WcACgkQscQJ24LbaUSjzgCfWq26RMqFLgGU9B8C0mb+Wogu
A5IAnjKpupGbdOZAKtYZkglYKSmbqtqK
=iTzW
-END PGP SIGNATURE-
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 00/11] completion: general cleanups

2013-04-27 Thread Felipe Contreras
On Sat, Apr 27, 2013 at 7:36 AM, Felipe Contreras
 wrote:
> On Sat, Apr 27, 2013 at 6:33 AM, Manlio Perillo
>  wrote:
>> -BEGIN PGP SIGNED MESSAGE-
>> Hash: SHA1
>>
>> Il 27/04/2013 12:19, Felipe Contreras ha scritto:
>>> Hi,
>>>
>>> Basically while trying to understand the code for path completion, I found 
>>> that
>>> a lot of code was duplicated, and for not much gain.
>>>
>>> I also noticed that doing 'git add file' doesn't add the trailing space as
>>> before. It's not clear if it should be possible to do that with -o 
>>> filenames,
>>> but after all, what do -o filenames gives us? Nothing we can't do ourselves,
>>> apparently.
>>>
>>
>> No, you can not do it yourself, as far as I know.
>>
>> I added the `compopt -o filenames` on Junio request for something like
>> "It  would be nice if completion for real files would behave like
>> builtin bash completion", if I remember correctly.
>>
>> Try `git rm contrib/completion/`, in the git reporitory.
>>
>> Using the new feature, bash will suggest:
>> "git-completion.bash  git-completion.tcsh  git-completion.zsh
>> git-prompt.sh"
>>
>> Old behaviour, instead, was to suggest:
>> "contrib/completion/git-completion.bash
>> contrib/completion/git-completion.zsh
>> contrib/completion/git-completion.tcsh  contrib/completion/git-prompt.sh"
>>
>> I tried several things, but I was unable to emulate Bash builtin file
>> completion, whithout having to use `compopt -o filenames`.
>
> I see. I'm not convinced it's such a great feature, but it would be
> nice to have.
>
> Anyway, 'compopt -o filenames +o nospace' should restore the old
> behavior to add a space after the completion.
>
>> As far as the "double slash" problem with the
>> __git_index_file_list_filter_bash function, please try
>> `git rm contrib`.
>>
>> With current code, Bash will suggest:
>> "blameview/ diffall/ git-shell-commands/"
>>
>> If you remove the __git_index_file_list_filter_bash function and use
>> __git_index_file_list_filter_compat instead, Bash will suggest:
>>
>> "blameview// diffall// git-shell-commands//"
>>
>> I can confirm this on my system, and it was confirmed by another user.
>> It only happens when you use `compopt -o filenames`. I don't know if
>> this is a bug or a feature, but I can try to ask to Bash mailing list,
>> so that we can update the comment to make more clear why a separate
>> function was needed.
>
> I've managed to reproduce the issue. The slash doesn't appear in the
> completion, it appears on the list of completions.
>
> I'll see what I can think to fix the issues while still keep the code simple.

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 ()

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 00/11] completion: general cleanups

2013-04-27 Thread Felipe Contreras
On Sat, Apr 27, 2013 at 6:33 AM, Manlio Perillo
 wrote:
> -BEGIN PGP SIGNED MESSAGE-
> Hash: SHA1
>
> Il 27/04/2013 12:19, Felipe Contreras ha scritto:
>> Hi,
>>
>> Basically while trying to understand the code for path completion, I found 
>> that
>> a lot of code was duplicated, and for not much gain.
>>
>> I also noticed that doing 'git add file' doesn't add the trailing space as
>> before. It's not clear if it should be possible to do that with -o filenames,
>> but after all, what do -o filenames gives us? Nothing we can't do ourselves,
>> apparently.
>>
>
> No, you can not do it yourself, as far as I know.
>
> I added the `compopt -o filenames` on Junio request for something like
> "It  would be nice if completion for real files would behave like
> builtin bash completion", if I remember correctly.
>
> Try `git rm contrib/completion/`, in the git reporitory.
>
> Using the new feature, bash will suggest:
> "git-completion.bash  git-completion.tcsh  git-completion.zsh
> git-prompt.sh"
>
> Old behaviour, instead, was to suggest:
> "contrib/completion/git-completion.bash
> contrib/completion/git-completion.zsh
> contrib/completion/git-completion.tcsh  contrib/completion/git-prompt.sh"
>
> I tried several things, but I was unable to emulate Bash builtin file
> completion, whithout having to use `compopt -o filenames`.

I see. I'm not convinced it's such a great feature, but it would be
nice to have.

Anyway, 'compopt -o filenames +o nospace' should restore the old
behavior to add a space after the completion.

> As far as the "double slash" problem with the
> __git_index_file_list_filter_bash function, please try
> `git rm contrib`.
>
> With current code, Bash will suggest:
> "blameview/ diffall/ git-shell-commands/"
>
> If you remove the __git_index_file_list_filter_bash function and use
> __git_index_file_list_filter_compat instead, Bash will suggest:
>
> "blameview// diffall// git-shell-commands//"
>
> I can confirm this on my system, and it was confirmed by another user.
> It only happens when you use `compopt -o filenames`. I don't know if
> this is a bug or a feature, but I can try to ask to Bash mailing list,
> so that we can update the comment to make more clear why a separate
> function was needed.

I've managed to reproduce the issue. The slash doesn't appear in the
completion, it appears on the list of completions.

I'll see what I can think to fix the issues while still keep the code simple.

Cheers.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 00/11] completion: general cleanups

2013-04-27 Thread Manlio Perillo
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Il 27/04/2013 12:19, Felipe Contreras ha scritto:
> Hi,
> 
> Basically while trying to understand the code for path completion, I found 
> that
> a lot of code was duplicated, and for not much gain.
> 
> I also noticed that doing 'git add file' doesn't add the trailing space as
> before. It's not clear if it should be possible to do that with -o filenames,
> but after all, what do -o filenames gives us? Nothing we can't do ourselves,
> apparently.
> 

No, you can not do it yourself, as far as I know.

I added the `compopt -o filenames` on Junio request for something like
"It  would be nice if completion for real files would behave like
builtin bash completion", if I remember correctly.

Try `git rm contrib/completion/`, in the git reporitory.

Using the new feature, bash will suggest:
"git-completion.bash  git-completion.tcsh  git-completion.zsh
git-prompt.sh"

Old behaviour, instead, was to suggest:
"contrib/completion/git-completion.bash
contrib/completion/git-completion.zsh
contrib/completion/git-completion.tcsh  contrib/completion/git-prompt.sh"

I tried several things, but I was unable to emulate Bash builtin file
completion, whithout having to use `compopt -o filenames`.



As far as the "double slash" problem with the
__git_index_file_list_filter_bash function, please try
`git rm contrib`.

With current code, Bash will suggest:
"blameview/ diffall/ git-shell-commands/"

If you remove the __git_index_file_list_filter_bash function and use
__git_index_file_list_filter_compat instead, Bash will suggest:

"blameview// diffall// git-shell-commands//"

I can confirm this on my system, and it was confirmed by another user.
It only happens when you use `compopt -o filenames`. I don't know if
this is a bug or a feature, but I can try to ask to Bash mailing list,
so that we can update the comment to make more clear why a separate
function was needed.


> [...]


Regards  Manlio
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAlF7t5gACgkQscQJ24LbaUSO5QCffllxM8RbGUP47kb7uL5J3drF
hkUAn26ezKptTAC412EJZnxjh7RVcdAO
=Piyz
-END PGP SIGNATURE-
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html