Merge branch 'sg/completion-config'
authorJunio C Hamano <gitster@pobox.com>
Fri, 22 May 2015 19:41:53 +0000 (12:41 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 22 May 2015 19:41:54 +0000 (12:41 -0700)
Code clean-up for completion script (in contrib/).

* sg/completion-config:
completion: simplify query for config variables
completion: add a helper function to get config variables

contrib/completion/git-completion.bash
t/t9902-completion.sh
index 20b81146128960041f39b755d37e1d4d6bf61312..bfc74e9d57a5293fce39362c68e7490888ec08e6 100644 (file)
@@ -739,30 +739,25 @@ __git_compute_porcelain_commands ()
        __git_porcelain_commands=$(__git_list_porcelain_commands)
 }
 
+# Lists all set config variables starting with the given section prefix,
+# with the prefix removed.
+__git_get_config_variables ()
+{
+       local section="$1" i IFS=$'\n'
+       for i in $(git --git-dir="$(__gitdir)" config --get-regexp "^$section\..*" 2>/dev/null); do
+               i="${i#$section.}"
+               echo "${i/ */}"
+       done
+}
+
 __git_pretty_aliases ()
 {
-       local i IFS=$'\n'
-       for i in $(git --git-dir="$(__gitdir)" config --get-regexp "pretty\..*" 2>/dev/null); do
-               case "$i" in
-               pretty.*)
-                       i="${i#pretty.}"
-                       echo "${i/ */}"
-                       ;;
-               esac
-       done
+       __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
@@ -2260,12 +2255,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..2ba62fbc178e1c92dff493beebdc9683b36efd2a 100755 (executable)
@@ -370,6 +370,40 @@ test_expect_success '__git_remotes - list remotes from $GIT_DIR/remotes and from
        test_cmp expect actual
 '
 
+test_expect_success '__git_get_config_variables' '
+       cat >expect <<-EOF &&
+       name-1
+       name-2
+       EOF
+       test_config interesting.name-1 good &&
+       test_config interesting.name-2 good &&
+       test_config subsection.interesting.name-3 bad &&
+       __git_get_config_variables interesting >actual &&
+       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