summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 9244d69)
raw | patch | inline | side by side (parent: 9244d69)
author | SZEDER Gábor <szeder@ira.uka.de> | |
Thu, 28 Apr 2011 16:01:52 +0000 (18:01 +0200) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Thu, 28 Apr 2011 16:40:20 +0000 (09:40 -0700) |
In v1.7.4-rc0~11^2~2 (bash: get --pretty=m<tab> completion to work
with bash v4, 2010-12-02) we started to use _get_comp_words_by_ref()
to access completion-related variables. That was large change, and to
make it easily reviewable, we invoked _get_comp_words_by_ref() in each
completion function and systematically replaced every occurance of
bash's completion-related variables ($COMP_WORDS and $COMP_CWORD) with
variables set by _get_comp_words_by_ref().
This has the downside that _get_comp_words_by_ref() is invoked several
times during a single completion. The worst offender is perhaps 'git
log mas<TAB>': during the completion of 'master'
_get_comp_words_by_ref() is invoked no less than six times.
However, the variables $prev, $cword, and $words provided by
_get_comp_words_by_ref() are not modified in any of the completion
functions, and the previous commit ensures that the $cur variable is
not modified as well. This makes it possible to invoke
_get_comp_words_by_ref() to get those variables only once in our
toplevel completion functions _git() and _gitk(), and all other
completion functions will inherit them.
Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
with bash v4, 2010-12-02) we started to use _get_comp_words_by_ref()
to access completion-related variables. That was large change, and to
make it easily reviewable, we invoked _get_comp_words_by_ref() in each
completion function and systematically replaced every occurance of
bash's completion-related variables ($COMP_WORDS and $COMP_CWORD) with
variables set by _get_comp_words_by_ref().
This has the downside that _get_comp_words_by_ref() is invoked several
times during a single completion. The worst offender is perhaps 'git
log mas<TAB>': during the completion of 'master'
_get_comp_words_by_ref() is invoked no less than six times.
However, the variables $prev, $cword, and $words provided by
_get_comp_words_by_ref() are not modified in any of the completion
functions, and the previous commit ensures that the $cur variable is
not modified as well. This makes it possible to invoke
_get_comp_words_by_ref() to get those variables only once in our
toplevel completion functions _git() and _gitk(), and all other
completion functions will inherit them.
Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/completion/git-completion.bash | patch | blob | history |
index 2ca91a3cc3140bdefeeb9afd0e6412e198a5b4f3..00691fcd82f13a55d06b3413a3fa2757a4c58269 100755 (executable)
# generates completion reply with compgen
__gitcomp ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
local cur_="$cur"
if [ $# -gt 2 ]; then
__git_refs ()
{
local i is_hash=y dir="$(__gitdir "${1-}")" track="${2-}"
- local cur format refs
- _get_comp_words_by_ref -n =: cur
+ local format refs
if [ -d "$dir" ]; then
case "$cur" in
refs|refs/*)
__git_complete_revlist_file ()
{
- local pfx ls ref cur
- _get_comp_words_by_ref -n =: cur
- local cur_="$cur"
+ local pfx ls ref cur_="$cur"
case "$cur_" in
*..?*:*)
return
__git_complete_remote_or_refspec ()
{
- local cur words cword
- _get_comp_words_by_ref -n =: cur words cword
local cur_="$cur" cmd="${words[1]}"
local i c=2 remote="" pfx="" lhs=1 no_complete_refspec=0
while [ $c -lt $cword ]; do
__git_complete_strategy ()
{
- local cur prev
- _get_comp_words_by_ref -n =: cur prev
__git_compute_merge_strategies
case "$prev" in
-s|--strategy)
# __git_find_on_cmdline requires 1 argument
__git_find_on_cmdline ()
{
- local word subcommand c=1 words cword
- _get_comp_words_by_ref -n =: words cword
+ local word subcommand c=1
while [ $c -lt $cword ]; do
word="${words[c]}"
for subcommand in $1; do
__git_has_doubledash ()
{
- local c=1 words cword
- _get_comp_words_by_ref -n =: words cword
+ local c=1
while [ $c -lt $cword ]; do
if [ "--" = "${words[c]}" ]; then
return 0
_git_am ()
{
- local cur dir="$(__gitdir)"
- _get_comp_words_by_ref -n =: cur
+ local dir="$(__gitdir)"
if [ -d "$dir"/rebase-apply ]; then
__gitcomp "--skip --continue --resolved --abort"
return
_git_apply ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--whitespace=*)
__gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
{
__git_has_doubledash && return
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "
_git_archive ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--format=*)
__gitcomp "$(git archive --list)" "" "${cur##--format=}"
_git_branch ()
{
- local i c=1 only_local_ref="n" has_r="n" cur words cword
+ local i c=1 only_local_ref="n" has_r="n"
- _get_comp_words_by_ref -n =: cur words cword
while [ $c -lt $cword ]; do
i="${words[c]}"
case "$i" in
_git_bundle ()
{
- local words cword
- _get_comp_words_by_ref -n =: words cword
local cmd="${words[2]}"
case "$cword" in
2)
{
__git_has_doubledash && return
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--conflict=*)
__gitcomp "diff3 merge" "" "${cur##--conflict=}"
_git_cherry_pick ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "--edit --no-commit"
{
__git_has_doubledash && return
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "--dry-run --quiet"
_git_clone ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "
{
__git_has_doubledash && return
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--cleanup=*)
__gitcomp "default strip verbatim whitespace
_git_describe ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "
{
__git_has_doubledash && return
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
{
__git_has_doubledash && return
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--tool=*)
__gitcomp "$__git_mergetools_common kompare" "" "${cur##--tool=}"
_git_fetch ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "$__git_fetch_options"
_git_format_patch ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--thread=*)
__gitcomp "
_git_fsck ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "
_git_gc ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "--prune --aggressive"
{
__git_has_doubledash && return
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "
_git_help ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "--all --info --man --web"
_git_init ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--shared=*)
__gitcomp "
{
__git_has_doubledash && return
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "--cached --deleted --modified --others --ignored
if [ -f "$g/MERGE_HEAD" ]; then
merge="--merge"
fi
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--pretty=*)
__gitcomp "$__git_log_pretty_formats $(__git_pretty_aliases)
{
__git_complete_strategy && return
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "$__git_merge_options"
_git_mergetool ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--tool=*)
__gitcomp "$__git_mergetools_common tortoisemerge" "" "${cur##--tool=}"
_git_mv ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "--dry-run"
{
local subcommands='add append copy edit list prune remove show'
local subcommand="$(__git_find_on_cmdline "$subcommands")"
- local cur words cword
- _get_comp_words_by_ref -n =: cur words cword
case "$subcommand,$cur" in
,--*)
{
__git_complete_strategy && return
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "
_git_push ()
{
- local cur prev
- _get_comp_words_by_ref -n =: cur prev
case "$prev" in
--repo)
__gitcomp "$(__git_remotes)"
_git_rebase ()
{
local dir="$(__gitdir)"
- local cur
- _get_comp_words_by_ref -n =: cur
if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
__gitcomp "--continue --skip --abort"
return
@@ -1853,8 +1784,6 @@ __git_send_email_suppresscc_options="author self cc bodycc sob cccmd body all"
_git_send_email ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--confirm=*)
__gitcomp "
__git_config_get_set_variables ()
{
- local words cword
- _get_comp_words_by_ref -n =: words cword
local prevword word config_file= c=$cword
while [ $c -gt 1 ]; do
word="${words[c]}"
_git_config ()
{
- local cur prev
- _get_comp_words_by_ref -n =: cur prev
case "$prev" in
branch.*.remote)
__gitcomp "$(__git_remotes)"
{
__git_has_doubledash && return
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "--merge --mixed --hard --soft --patch"
_git_revert ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "--edit --mainline --no-edit --no-commit --signoff"
{
__git_has_doubledash && return
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "--cached --dry-run --ignore-unmatch --quiet"
{
__git_has_doubledash && return
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "
{
__git_has_doubledash && return
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--pretty=*)
__gitcomp "$__git_log_pretty_formats $(__git_pretty_aliases)
_git_show_branch ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "
_git_stash ()
{
- local cur
- _get_comp_words_by_ref -n =: cur
local save_opts='--keep-index --no-keep-index --quiet --patch'
local subcommands='save list show apply clear drop pop create branch'
local subcommand="$(__git_find_on_cmdline "$subcommands")"
local subcommands="add status init update summary foreach sync"
if [ -z "$(__git_find_on_cmdline "$subcommands")" ]; then
- local cur
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "--quiet --cached"
--edit --rmdir --find-copies-harder --copy-similarity=
"
- local cur
- _get_comp_words_by_ref -n =: cur
case "$subcommand,$cur" in
fetch,--*)
__gitcomp "--revision= --fetch-all $fc_opts"
_git_tag ()
{
local i c=1 f=0
- local words cword prev
- _get_comp_words_by_ref -n =: words cword prev
while [ $c -lt $cword ]; do
i="${words[c]}"
case "$i" in
setopt KSH_TYPESET
fi
- local cur words cword
- _get_comp_words_by_ref -n =: cur words cword
+ local cur words cword prev
+ _get_comp_words_by_ref -n =: cur words cword prev
while [ $c -lt $cword ]; do
i="${words[c]}"
case "$i" in
setopt KSH_TYPESET
fi
+ local cur words cword prev
+ _get_comp_words_by_ref -n =: cur words cword prev
+
__git_has_doubledash && return
- local cur
local g="$(__gitdir)"
local merge=""
if [ -f "$g/MERGE_HEAD" ]; then
merge="--merge"
fi
- _get_comp_words_by_ref -n =: cur
case "$cur" in
--*)
__gitcomp "