aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorSZEDER Gábor <szeder@ira.uka.de>2010-02-23 22:02:59 +0100
committerJunio C Hamano <gitster@pobox.com>2010-02-24 08:32:26 -0800
commit8024ea60db290dd64db294e1019a0ada64ce1770 (patch)
tree9c526ef2d12b8006f13694e9f48f8a34e04d9719 /contrib
parent424cce832d180843ab9b54eec3a7643948fc1afd (diff)
downloadgit-8024ea60db290dd64db294e1019a0ada64ce1770.tar.gz
git-8024ea60db290dd64db294e1019a0ada64ce1770.tar.xz
bash: support user-supplied completion scripts for aliases
Shell command aliases can get rather complex, and the completion script can not always determine correctly the git command invoked by such an alias. For such cases users might want to provide custom completion scripts the same way like for their custom commands made possible by the previous patch. The current completion script does not allow this, because if it encounters an alias, then it will unconditionally perform completion for the aliased git command (in case it can determine the aliased git command, of course). With this patch the completion script will first search for a completion function for the command given on the command line, be it a git command, a custom git command of the user, or an alias, and invoke that function to perform the completion. This has no effect on git commands, because they can not be aliased anyway. If it is an alias and there is a completion function for that alias (e.g. _git_foo() for the alias 'foo'), then it will be invoked to perform completion, allowing users to provide custom completion functions for aliases. If such a completion function can not be found, only then will the completion script check whether the command given on the command line is an alias or not, and proceed as usual (i.e. find out the aliased git command and provide completion for it). Signed-off-by: SZEDER Gábor <szeder@ira.uka.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'contrib')
-rwxr-xr-xcontrib/completion/git-completion.bash11
1 files changed, 7 insertions, 4 deletions
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 2ac356705..8593fd707 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2216,11 +2216,14 @@ _git ()
return
fi
- local expansion=$(__git_aliased_command "$command")
- [ "$expansion" ] && command="$expansion"
-
local completion_func="_git_${command//-/_}"
- declare -F $completion_func >/dev/null && $completion_func
+ declare -F $completion_func >/dev/null && $completion_func && return
+
+ local expansion=$(__git_aliased_command "$command")
+ if [ -n "$expansion" ]; then
+ completion_func="_git_${expansion//-/_}"
+ declare -F $completion_func >/dev/null && $completion_func
+ fi
}
_gitk ()