1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-05-20 06:56:05 +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
TODO
* 31748: Completion/Unix/Command/_git: _git: support completing
remote branches without <remote>/ prefix
2013-09-22 Øystein Walle <oystwa@gmail.com>
* 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
# TODO: Allow A...B
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' \
file_arg='modified-files::__git_modified_files'
if [[ -n ${opt_args[(I)-b|-B|--orphan]} ]]; then
remote_branch_noprefix_arg=
tree_ish_arg=
file_arg=
elif [[ -n $opt_args[(I)--track] ]]; then
branch_arg='remote-branches::__git_remote_branch_names'
remote_branch_noprefix_arg=
tree_ish_arg=
file_arg=
elif [[ -n ${opt_args[(I)--ours|--theirs|-m|--conflict|--patch]} ]]; then
branch_arg=
remote_branch_noprefix_arg=
fi
_alternative \
$branch_arg \
$remote_branch_noprefix_arg \
$tree_ish_arg \
$file_arg && ret=0
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
}
(( $+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] )) ||
__git_commits () {
# TODO: deal with things that __git_heads and __git_tags has in common (i.e.,