Positions are currently hard-coded, which means completions in the form of 'git --foo bar' fail, because positions have been shifted. This fixes the issue that was spotted in the mailing list regarding certain aliases[1]. [1] http://thread.gmane.org/gmane.comp.version-control.git/185184 Cc: SZEDER Gábor <szeder@xxxxxxxxxx> Cc: Scott Bronson <bronson@xxxxxxxxxxx> Cc: Nathan Broadbent <nathan.f77@xxxxxxxxx> Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> --- contrib/completion/git-completion.bash | 16 +++++++++------- t/t9902-completion.sh | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index e648d7c..049110e 100755 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -724,7 +724,8 @@ __git_complete_revlist () __git_complete_remote_or_refspec () { local cur_="$cur" - local i c=2 remote="" pfx="" lhs=1 no_complete_refspec=0 + local i c=$cmd_pos remote="" pfx="" lhs=1 no_complete_refspec=0 + if [ "$cmd" = "remote" ]; then ((c++)) fi @@ -1144,12 +1145,11 @@ _git_bundle () { local subcommands='create list-heads verify unbundle' local subcommand="$(__git_find_on_cmdline "$subcommands")" - - case "$cword" in - 2) + case $(( cword - cmd_pos )) in + 0) __gitcomp "$subcommands" ;; - 3) + 1) # looking for a file ;; *) @@ -1449,7 +1449,7 @@ _git_grep () esac case "$cword,$prev" in - 2,*|*,-*) + $cmd_pos,*|*,-*) if test -r tags; then __gitcomp_nl "$(__git_match_ctag "$cur" tags)" return @@ -2603,7 +2603,7 @@ _git_whatchanged () _git () { - local i c=1 cmd __git_dir + local i c=1 cmd cmd_pos __git_dir while [ $c -lt $cword ]; do i="${words[c]}" @@ -2642,6 +2642,8 @@ _git () return fi + (( cmd_pos = c + 1 )) + local completion_func="_git_${cmd//-/_}" declare -f $completion_func >/dev/null && $completion_func && return diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index bb66848..6904594 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -295,4 +295,25 @@ test_expect_success 'other' ' test_completion "git tag -d v" "v0.1 " ' +test_expect_success 'global options extra checks' ' + test_completion "git --no-pager fetch o" "origin " && + test_completion "git --no-pager fetch origin m" "master:master " && + test_completion "git --no-pager pull o" "origin " && + test_completion "git --no-pager pull origin m" "master " && + test_completion "git --no-pager push o" "origin " && + test_completion "git --no-pager push origin m" "master " && + test_completion "git --no-pager bisect st" "start " && + test_completion "git --no-pager add -- foo" "" && + test_completion "git --no-pager config --file=foo --get c" "color.ui " && + cat >expected <<-\EOF && + origin/HEAD + origin/master + EOF + test_completion "git --no-pager branch -r o" && + test_completion "git --no-pager bundle cr" "create " && + test_completion "git --no-pager grep f" "foobar " && + test_completion "git --no-pager notes --ref m" "master " && + test_completion "git --no-pager tag -d v" "v0.1 " +' + test_done -- 1.7.10 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html