Skip to content

Commit b4cfbc9

Browse files
felipecgitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 7d13e0a commit b4cfbc9

File tree

1 file changed

+11
-15
lines changed

1 file changed

+11
-15
lines changed

contrib/completion/git-completion.bash

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -53,19 +53,6 @@ __gitdir ()
5353
fi
5454
}
5555

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-
6956
# The following function is based on code from:
7057
#
7158
# bash_completion - programmable completion functions for bash 3.2+
@@ -220,8 +207,17 @@ __gitcomp ()
220207
--*=)
221208
;;
222209
*)
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
225221
;;
226222
esac
227223
}

0 commit comments

Comments
 (0)