From 4ad91321ee95598c2488ab5e39afec13575d4e3f Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Mon, 27 Nov 2006 03:40:47 -0500 Subject: [PATCH] Teach git-completion.bash how to complete git-merge. Now that git-merge is high-level Porcelain users are going to expect to be able to use it from the command line, in which case we really should also be able to complete ref names as parameters. I'm also including completion support for the merge strategies that are supported by git-merge.sh, should the user wish to use a different strategy than their default. Signed-off-by: Shawn O. Pearce Signed-off-by: Junio C Hamano --- contrib/completion/git-completion.bash | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index a43a17716..28bd0e3ba 100755 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -81,6 +81,16 @@ __git_remotes () done } +__git_merge_strategies () +{ + sed -n "/^all_strategies='/{ + s/^all_strategies='// + s/'// + p + q + }" "$(git --exec-path)/git-merge" +} + __git_complete_file () { local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}" @@ -240,6 +250,24 @@ _git_log () esac } +_git_merge () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + COMPREPLY=($(compgen -W " + --no-commit --no-summary --squash + " -- "$cur")) + return + esac + if [ $COMP_CWORD -gt 1 -a X-s = "X${COMP_WORDS[COMP_CWORD-1]}" ] + then + COMPREPLY=($(compgen -W "$(__git_merge_strategies)" -- "$cur")) + else + COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur")) + fi +} + _git_merge_base () { local cur="${COMP_WORDS[COMP_CWORD]}" @@ -348,6 +376,7 @@ _git () log) _git_log ;; ls-remote) _git_ls_remote ;; ls-tree) _git_ls_tree ;; + merge) _git_merge;; merge-base) _git_merge_base ;; pull) _git_pull ;; push) _git_push ;; @@ -376,6 +405,7 @@ complete -o default -o nospace -F _git_fetch git-fetch complete -o default -o nospace -F _git_log git-log complete -o default -F _git_ls_remote git-ls-remote complete -o default -o nospace -F _git_ls_tree git-ls-tree +complete -o default -F _git_merge git-merge complete -o default -F _git_merge_base git-merge-base complete -o default -o nospace -F _git_pull git-pull complete -o default -o nospace -F _git_push git-push -- 2.30.2