From: Junio C Hamano Date: Wed, 23 May 2018 05:38:25 +0000 (+0900) Subject: Merge branch 'fg/completion-external' X-Git-Tag: v2.18.0-rc0~36 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fb3a0cabf23ccd1d4ae3fead2c5b478930630822;p=git Merge branch 'fg/completion-external' The command line completion mechanism (in contrib/) learned to load custom completion file for "git $command" where $command is a custom "git-$command" that the end user has on the $PATH when using newer version of bash. * fg/completion-external: completion: load completion file for external subcommand --- fb3a0cabf23ccd1d4ae3fead2c5b478930630822 diff --cc contrib/completion/git-completion.bash index f2f331120b,604ba2b039..961a0ed76f --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@@ -3045,45 -3036,6 +3045,52 @@@ _git_worktree ( fi } +__git_complete_common () { + local command="$1" + + case "$cur" in + --*) + __gitcomp_builtin "$command" + ;; + esac +} + +__git_cmds_with_parseopt_helper= +__git_support_parseopt_helper () { + test -n "$__git_cmds_with_parseopt_helper" || + __git_cmds_with_parseopt_helper="$(__git --list-parseopt-builtins)" + + case " $__git_cmds_with_parseopt_helper " in + *" $1 "*) + return 0 + ;; + *) + return 1 + ;; + esac +} + +__git_complete_command () { + local command="$1" + local completion_func="_git_${command//-/_}" - if declare -f $completion_func >/dev/null 2>/dev/null; then ++ if ! declare -f $completion_func >/dev/null 2>/dev/null && ++ declare -f _completion_loader >/dev/null 2>/dev/null ++ then ++ _completion_loader "git-$command" ++ fi ++ if declare -f $completion_func >/dev/null 2>/dev/null ++ then + $completion_func + return 0 - elif __git_support_parseopt_helper "$command"; then ++ elif __git_support_parseopt_helper "$command" ++ then + __git_complete_common "$command" + return 0 + else + return 1 + fi +} + __git_main () { local i c=1 command __git_dir __git_repo_path