completion: inline __gitcomp_1 to its sole callsite

There is no point in calling a separate function that is only used in one place. Especially considering that there's no need to call compgen, and we traverse the words ourselves both in __gitcompadd, and __gitcomp_1. Let's squash the functions together, and traverse only once. This improves performance. For N number of words: == 1 == original: 0.002s new: 0.000s == 10 == original: 0.005s new: 0.001s == 100 == original: 0.009s new: 0.006s == 1000 == original: 0.027s new: 0.019s == 10000 == original: 0.163s new: 0.151s == 100000 == original: 1.555s new: 1.497s No functional changes. Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Felipe Contreras committed Apr 10, 2013 at 01:57 UTC b4cfbc969cd910992a08b12dc612d19323668e09
1 file changed +11 -15
contrib/completion/git-completion.bash
+11 -15
@@ -53,19 +53,6 @@ __gitdir ()
53 fi
54 }
55
56 -__gitcomp_1 ()
57 -{
58 - local c IFS=$' \t\n'
59 - for c in $1; do
60 - c="$c$2"
61 - case $c in
62 - --*=*|*.) ;;
63 - *) c="$c " ;;
64 - esac
65 - printf '%s\n' "$c"
66 - done
67 -}
68 -
56 # The following function is based on code from:
57 #
58 # bash_completion - programmable completion functions for bash 3.2+
@@ -220,8 +207,17 @@ __gitcomp ()
207 --*=)
208 ;;
209 *)
223 - local IFS=$'\n'
224 - __gitcompadd "$(__gitcomp_1 "${1-}" "${4-}")" "${2-}" "$cur_" ""
210 + local c i=0 IFS=$' \t\n'
211 + for c in $1; do
212 + c="$c${4-}"
213 + case $c in
214 + --*=*|*.) ;;
215 + *) c="$c " ;;
216 + esac
217 + if [[ $c == "$cur_"* ]]; then
218 + COMPREPLY[i++]="${2-}$c"
219 + fi
220 + done
221 ;;
222 esac
223 }