Browse Source

completion: add a helper function to get config variables

Currently there are a few completion functions that perform similar 'git
config' queries and filtering to get config variable names: the completion
of pretty aliases, aliases, and remote groups for 'git remote update'.

Unify those 'git config' queries in a helper function to eliminate code
duplication.

Though the helper functions to get pretty aliases and alieses are reduced
to mere one-liner wrappers around the newly added function, keep these
helpers still, because users' completion functions out there might depend
on them.  And they keep their callers a tad easier to read, too.

Add tests for the pretty alias and alias helper to show that they work
as before; not for the remote groups query, though, because that's not
extracted into a helper function and it's not worth the effort to do so
for a sole callsite.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
SZEDER Gábor 10 years ago committed by Junio C Hamano
parent
commit
e8f9e42829
  1. 34
      contrib/completion/git-completion.bash
  2. 22
      t/t9902-completion.sh

34
contrib/completion/git-completion.bash

@ -739,30 +739,29 @@ __git_compute_porcelain_commands () @@ -739,30 +739,29 @@ __git_compute_porcelain_commands ()
__git_porcelain_commands=$(__git_list_porcelain_commands)
}

__git_pretty_aliases ()
# Lists all set config variables starting with the given section prefix,
# with the prefix removed.
__git_get_config_variables ()
{
local i IFS=$'\n'
for i in $(git --git-dir="$(__gitdir)" config --get-regexp "pretty\..*" 2>/dev/null); do
local section="$1" i IFS=$'\n'
for i in $(git --git-dir="$(__gitdir)" config --get-regexp "$section\..*" 2>/dev/null); do
case "$i" in
pretty.*)
i="${i#pretty.}"
$section.*)
i="${i#$section.}"
echo "${i/ */}"
;;
esac
done
}

__git_pretty_aliases ()
{
__git_get_config_variables "pretty"
}

__git_aliases ()
{
local i IFS=$'\n'
for i in $(git --git-dir="$(__gitdir)" config --get-regexp "alias\..*" 2>/dev/null); do
case "$i" in
alias.*)
i="${i#alias.}"
echo "${i/ */}"
;;
esac
done
__git_get_config_variables "alias"
}

# __git_aliased_command requires 1 argument
@ -2259,12 +2258,7 @@ _git_remote () @@ -2259,12 +2258,7 @@ _git_remote ()
__git_complete_remote_or_refspec
;;
update)
local i c='' IFS=$'\n'
for i in $(git --git-dir="$(__gitdir)" config --get-regexp "remotes\..*" 2>/dev/null); do
i="${i#remotes.}"
c="$c ${i/ */}"
done
__gitcomp "$c"
__gitcomp "$(__git_get_config_variables "remotes")"
;;
*)
;;

22
t/t9902-completion.sh

@ -370,6 +370,28 @@ test_expect_success '__git_remotes - list remotes from $GIT_DIR/remotes and from @@ -370,6 +370,28 @@ test_expect_success '__git_remotes - list remotes from $GIT_DIR/remotes and from
test_cmp expect actual
'

test_expect_success '__git_pretty_aliases' '
cat >expect <<-EOF &&
author
hash
EOF
test_config pretty.author "%an %ae" &&
test_config pretty.hash %H &&
__git_pretty_aliases >actual &&
test_cmp expect actual
'

test_expect_success '__git_aliases' '
cat >expect <<-EOF &&
ci
co
EOF
test_config alias.ci commit &&
test_config alias.co checkout &&
__git_aliases >actual &&
test_cmp expect actual
'

test_expect_success 'basic' '
run_completion "git " &&
# built-in

Loading…
Cancel
Save