threads / patch / 35495

patchcompletion: fix completion of certain aliases

Subject: [PATCH] completion: fix completion of certain aliases

## tl;dr

2 messages between Dec 7, 2013 and Dec 13, 2013. Diffs are folded; open one to read it.

replies: 1people: 2as markdown or json

Felipe Contreras· Dec 7, 2013, 13:11 UTC · lore

Some commands need the first word to determine the actual action that is being executed, however, the command is wrong when we use an alias, for example 'alias.p=push', if we try to complete 'git p origin ', the result would be wrong because __git_complete_remote_or_refspec() doesn't know where it come from.

So let's override words[1], so the alias 'p' is override by the actual command, 'push'.

Reported-by: Aymeric Beaumet <aymeric.beaumet@gmail.com>
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/completion/git-completion.bash | 1 +
 contrib/completion/git-completion.zsh  | 1 +
 2 files changed, 2 insertions(+)
Show changes to 2 files +2 −0

contrib/completion/git-completion.bash, contrib/completion/git-completion.zsh

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index dba3c15..c14bac4 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2530,6 +2530,7 @@ __git_main ()
 
 	local expansion=$(__git_aliased_command "$command")
 	if [ -n "$expansion" ]; then
+		words[1]=$expansion
 		completion_func="_git_${expansion//-/_}"
 		declare -f $completion_func >/dev/null && $completion_func
 	fi
diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh
index fac5e71..3eeb7f8 100644
--- a/contrib/completion/git-completion.zsh
+++ b/contrib/completion/git-completion.zsh
@@ -96,6 +96,7 @@ __git_zsh_bash_func ()
 
 	local expansion=$(__git_aliased_command "$command")
 	if [ -n "$expansion" ]; then
+		words[1]=$expansion
 		completion_func="_git_${expansion//-/_}"
 		declare -f $completion_func >/dev/null && $completion_func
 	fi
-- 
1.8.4.2+fc1
SZEDER Gábor· Dec 13, 2013, 14:16 UTC · re: Felipe Contreras · lore

Re: [PATCH] completion: fix completion of certain aliases

Hi,
On Sat, Dec 07, 2013 at 07:11:13AM -0600, Felipe Contreras wrote:
> Some commands need the first word to determine the actual action that is
> being executed, however, the command is wrong when we use an alias,

This first sentence was hard to understand for me because of the wrong terminology used. How about this instead:

  Some completion helper functions need to know the name of the git
  command to act properly.  However, ...
> for
> example 'alias.p=push', if we try to complete 'git p origin ', the
> result would be wrong because __git_complete_remote_or_refspec() doesn't
> know where it come from.

Are there other helper functions that are affected? After a quick glance I didn't find any. In this case we could even write the above as

  The __git_complete_remote_or_refspec() completion helper function
  needs to know ...
> So let's override words[1], so the alias 'p' is override by the actual
> command, 'push'.

words[1] is not always the name of the git command, it can also be an option to the main git command, e.g. in case of 'git -c key=value push ...' with this patch '-c' would be overwritten.

Best, Gábor

Show 35 quoted lines
> Reported-by: Aymeric Beaumet <aymeric.beaumet@gmail.com>
> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
> ---
>  contrib/completion/git-completion.bash | 1 +
>  contrib/completion/git-completion.zsh  | 1 +
>  2 files changed, 2 insertions(+)
> 
> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> index dba3c15..c14bac4 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -2530,6 +2530,7 @@ __git_main ()
>  
>  	local expansion=$(__git_aliased_command "$command")
>  	if [ -n "$expansion" ]; then
> +		words[1]=$expansion
>  		completion_func="_git_${expansion//-/_}"
>  		declare -f $completion_func >/dev/null && $completion_func
>  	fi
> diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh
> index fac5e71..3eeb7f8 100644
> --- a/contrib/completion/git-completion.zsh
> +++ b/contrib/completion/git-completion.zsh
> @@ -96,6 +96,7 @@ __git_zsh_bash_func ()
>  
>  	local expansion=$(__git_aliased_command "$command")
>  	if [ -n "$expansion" ]; then
> +		words[1]=$expansion
>  		completion_func="_git_${expansion//-/_}"
>  		declare -f $completion_func >/dev/null && $completion_func
>  	fi
> -- 
> 1.8.4.2+fc1
> 
> 

← back to recent threads