From: Junio C Hamano Date: Tue, 6 Apr 2010 21:50:45 +0000 (-0700) Subject: Merge branch 'sg/bash-completion' X-Git-Tag: v1.7.1-rc0~6 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/15bf05241676a1870cbb82a46f509130627bb1d2?ds=inline;hp=-c Merge branch 'sg/bash-completion' * sg/bash-completion: bash: completion for gitk aliases bash: support user-supplied completion scripts for aliases bash: support user-supplied completion scripts for user's git commands bash: improve aliased command recognition --- 15bf05241676a1870cbb82a46f509130627bb1d2 diff --combined contrib/completion/git-completion.bash index 733ac39a32,3029f160b0..545bd4b383 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@@ -250,9 -250,7 +250,9 @@@ __git_refs ( refs="${cur%/*}" ;; *) - if [ -e "$dir/HEAD" ]; then echo HEAD; fi + for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD; do + if [ -e "$dir/$i" ]; then echo $i; fi + done format="refname:short" refs="refs/tags refs/heads refs/remotes" ;; @@@ -627,10 -625,19 +627,19 @@@ __git_aliased_command ( local word cmdline=$(git --git-dir="$(__gitdir)" \ config --get "alias.$1") for word in $cmdline; do - if [ "${word##-*}" ]; then - echo $word + case "$word" in + \!gitk|gitk) + echo "gitk" return - fi + ;; + \!*) : shell command alias ;; + -*) : option ;; + *=*) : setting env ;; + git) : git itself ;; + *) + echo "$word" + return + esac done } @@@ -1084,6 -1091,11 +1093,11 @@@ _git_gc ( COMPREPLY=() } + _git_gitk () + { + _gitk + } + _git_grep () { __git_has_doubledash && return @@@ -1436,6 -1448,11 +1450,11 @@@ _git_send_email ( COMPREPLY=() } + _git_stage () + { + _git_add + } + __git_config_get_set_variables () { local prevword word config_file= c=$COMP_CWORD @@@ -2167,6 -2184,11 +2186,11 @@@ _git_tag ( esac } + _git_whatchanged () + { + _git_log + } + _git () { local i c=1 command __git_dir @@@ -2203,64 -2225,14 +2227,14 @@@ return fi + local completion_func="_git_${command//-/_}" + declare -F $completion_func >/dev/null && $completion_func && return + local expansion=$(__git_aliased_command "$command") - [ "$expansion" ] && command="$expansion" - - case "$command" in - am) _git_am ;; - add) _git_add ;; - apply) _git_apply ;; - archive) _git_archive ;; - bisect) _git_bisect ;; - bundle) _git_bundle ;; - branch) _git_branch ;; - checkout) _git_checkout ;; - cherry) _git_cherry ;; - cherry-pick) _git_cherry_pick ;; - clean) _git_clean ;; - clone) _git_clone ;; - commit) _git_commit ;; - config) _git_config ;; - describe) _git_describe ;; - diff) _git_diff ;; - difftool) _git_difftool ;; - fetch) _git_fetch ;; - format-patch) _git_format_patch ;; - fsck) _git_fsck ;; - gc) _git_gc ;; - grep) _git_grep ;; - help) _git_help ;; - init) _git_init ;; - log) _git_log ;; - ls-files) _git_ls_files ;; - ls-remote) _git_ls_remote ;; - ls-tree) _git_ls_tree ;; - merge) _git_merge;; - mergetool) _git_mergetool;; - merge-base) _git_merge_base ;; - mv) _git_mv ;; - name-rev) _git_name_rev ;; - notes) _git_notes ;; - pull) _git_pull ;; - push) _git_push ;; - rebase) _git_rebase ;; - remote) _git_remote ;; - replace) _git_replace ;; - reset) _git_reset ;; - revert) _git_revert ;; - rm) _git_rm ;; - send-email) _git_send_email ;; - shortlog) _git_shortlog ;; - show) _git_show ;; - show-branch) _git_show_branch ;; - stash) _git_stash ;; - stage) _git_add ;; - submodule) _git_submodule ;; - svn) _git_svn ;; - tag) _git_tag ;; - whatchanged) _git_log ;; - *) COMPREPLY=() ;; - esac + if [ -n "$expansion" ]; then + completion_func="_git_${expansion//-/_}" + declare -F $completion_func >/dev/null && $completion_func + fi } _gitk ()