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 <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Shawn O. Pearce 2006-11-27 03:40:47 -05:00 committed by Junio C Hamano
parent fde97d8ac6
commit 4ad91321ee

View File

@ -81,6 +81,16 @@ __git_remotes ()
done done
} }
__git_merge_strategies ()
{
sed -n "/^all_strategies='/{
s/^all_strategies='//
s/'//
p
q
}" "$(git --exec-path)/git-merge"
}
__git_complete_file () __git_complete_file ()
{ {
local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}" local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
@ -240,6 +250,24 @@ _git_log ()
esac 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 () _git_merge_base ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
@ -348,6 +376,7 @@ _git ()
log) _git_log ;; log) _git_log ;;
ls-remote) _git_ls_remote ;; ls-remote) _git_ls_remote ;;
ls-tree) _git_ls_tree ;; ls-tree) _git_ls_tree ;;
merge) _git_merge;;
merge-base) _git_merge_base ;; merge-base) _git_merge_base ;;
pull) _git_pull ;; pull) _git_pull ;;
push) _git_push ;; 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 -o nospace -F _git_log git-log
complete -o default -F _git_ls_remote git-ls-remote 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 -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 -F _git_merge_base git-merge-base
complete -o default -o nospace -F _git_pull git-pull complete -o default -o nospace -F _git_pull git-pull
complete -o default -o nospace -F _git_push git-push complete -o default -o nospace -F _git_push git-push