completion: add a helper function to get config variables
authorSZEDER Gábor <szeder@ira.uka.de>
Sun, 10 May 2015 12:50:17 +0000 (14:50 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 12 May 2015 22:12:19 +0000 (15:12 -0700)
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>
contrib/completion/git-completion.bash
t/t9902-completion.sh
index b28a14e8ca583e18d91e5eae0186a4ad352ad8fe..4594ebcb1a05d6df3c5f6fad64d691c42a57af39 100644 (file)
@@ -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 ()
                __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")"
                ;;
        *)
                ;;
index 4a14a5892e9ac06c967e17a4db68e57b06313c18..07f2478c9bd97f6c40d048c901b1e3be2288adb3 100755 (executable)
@@ -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