1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-06-13 04:56:30 +02:00

31748: _git: support completing remote branches without <remote>/ prefix

this is used in git 1.8's
git checkout <branch>
as a shorthand for
git checkout -b <branch> --track <remote>/<branch>
in case <branch> exists on exactly one remote and is not a local branch
This commit is contained in:
m0viefreak 2013-09-22 12:48:23 +02:00 committed by Frank Terbeck
parent e45f685d4a
commit 735e7becb9
2 changed files with 19 additions and 0 deletions

View File

@ -3,6 +3,9 @@
* 31746: Completion/Unix/Command/_git: _git: reword _git-config * 31746: Completion/Unix/Command/_git: _git: reword _git-config
TODO TODO
* 31748: Completion/Unix/Command/_git: _git: support completing
remote branches without <remote>/ prefix
2013-09-22 Øystein Walle <oystwa@gmail.com> 2013-09-22 Øystein Walle <oystwa@gmail.com>
* 31747: Completion/Unix/Command/_git: _git: completion updates to * 31747: Completion/Unix/Command/_git: _git: completion updates to

View File

@ -440,22 +440,27 @@ _git-checkout () {
if (( CURRENT == 1 )) && [[ -z $opt_args[(I)--] ]]; then if (( CURRENT == 1 )) && [[ -z $opt_args[(I)--] ]]; then
# TODO: Allow A...B # TODO: Allow A...B
local branch_arg='branches::__git_revisions' \ local branch_arg='branches::__git_revisions' \
remote_branch_noprefix_arg='remote branches::__git_remote_branch_names_noprefix' \
tree_ish_arg='tree-ishs::__git_tree_ishs' \ tree_ish_arg='tree-ishs::__git_tree_ishs' \
file_arg='modified-files::__git_modified_files' file_arg='modified-files::__git_modified_files'
if [[ -n ${opt_args[(I)-b|-B|--orphan]} ]]; then if [[ -n ${opt_args[(I)-b|-B|--orphan]} ]]; then
remote_branch_noprefix_arg=
tree_ish_arg= tree_ish_arg=
file_arg= file_arg=
elif [[ -n $opt_args[(I)--track] ]]; then elif [[ -n $opt_args[(I)--track] ]]; then
branch_arg='remote-branches::__git_remote_branch_names' branch_arg='remote-branches::__git_remote_branch_names'
remote_branch_noprefix_arg=
tree_ish_arg= tree_ish_arg=
file_arg= file_arg=
elif [[ -n ${opt_args[(I)--ours|--theirs|-m|--conflict|--patch]} ]]; then elif [[ -n ${opt_args[(I)--ours|--theirs|-m|--conflict|--patch]} ]]; then
branch_arg= branch_arg=
remote_branch_noprefix_arg=
fi fi
_alternative \ _alternative \
$branch_arg \ $branch_arg \
$remote_branch_noprefix_arg \
$tree_ish_arg \ $tree_ish_arg \
$file_arg && ret=0 $file_arg && ret=0
elif [[ -n ${opt_args[(I)-b|-B|-t|--track|--orphan]} ]]; then elif [[ -n ${opt_args[(I)-b|-B|-t|--track|--orphan]} ]]; then
@ -5371,6 +5376,17 @@ __git_remote_branch_names () {
_wanted remote-branch-names expl 'remote branch name' compadd $* - $branch_names _wanted remote-branch-names expl 'remote branch name' compadd $* - $branch_names
} }
(( $+functions[__git_remote_branch_names_noprefix] )) ||
__git_remote_branch_names_noprefix () {
local expl
declare -a heads
branch_names=(${${${(f)"$(_call_program remote-branch-refs-noprefix git for-each-ref --format='"%(refname)"' refs/remotes 2>/dev/null)"}##*/}:#HEAD})
__git_command_successful $pipestatus || return 1
_wanted remote-branch-names-noprefix expl 'remote branch name' compadd $* - $branch_names
}
(( $+functions[__git_commits] )) || (( $+functions[__git_commits] )) ||
__git_commits () { __git_commits () {
# TODO: deal with things that __git_heads and __git_tags has in common (i.e., # TODO: deal with things that __git_heads and __git_tags has in common (i.e.,