generate-cmdlist.sh: don't parse command-list.txt thrice
Change the "define_categories()" and "define_category_names()" functions to take the already-parsed output of "category_list()" as an argument, which brings our number of passes over "command-list.txt" from three to two. Then have "category_list()" itself take the output of "command_list()" as an argument, bringing the number of times we parse the file to one. Compared to the pre-image this speeds us up quite a bit: $ git show HEAD~:generate-cmdlist.sh >generate-cmdlist.sh.old $ hyperfine --warmup 10 -L v ,.old 'sh generate-cmdlist.sh{v} command-list.txt' Benchmark #1: sh generate-cmdlist.sh command-list.txt Time (mean ± σ): 22.9 ms ± 0.3 ms [User: 15.8 ms, System: 9.6 ms] Range (min … max): 22.5 ms … 24.0 ms 125 runs Benchmark #2: sh generate-cmdlist.sh.old command-list.txt Time (mean ± σ): 30.1 ms ± 0.4 ms [User: 24.4 ms, System: 17.5 ms] Range (min … max): 29.5 ms … 32.3 ms 96 runs Summary 'sh generate-cmdlist.sh command-list.txt' ran 1.32 ± 0.02 times faster than 'sh generate-cmdlist.sh.old command-list.txt' Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
e88842ee1c
commit
1cecd06e36
@ -26,7 +26,7 @@ command_list () {
|
||||
}
|
||||
|
||||
category_list () {
|
||||
command_list "$1" |
|
||||
echo "$1" |
|
||||
cut -d' ' -f2- |
|
||||
tr ' ' '\012' |
|
||||
grep -v '^$' |
|
||||
@ -37,7 +37,7 @@ define_categories () {
|
||||
echo
|
||||
echo "/* Command categories */"
|
||||
bit=0
|
||||
category_list "$1" |
|
||||
echo "$1" |
|
||||
while read cat
|
||||
do
|
||||
echo "#define CAT_$cat (1UL << $bit)"
|
||||
@ -51,7 +51,7 @@ define_category_names () {
|
||||
echo "/* Category names */"
|
||||
echo "static const char *category_names[] = {"
|
||||
bit=0
|
||||
category_list "$1" |
|
||||
echo "$1" |
|
||||
while read cat
|
||||
do
|
||||
echo " \"$cat\", /* (1UL << $bit) */"
|
||||
@ -64,7 +64,7 @@ define_category_names () {
|
||||
print_command_list () {
|
||||
echo "static struct cmdname_help command_list[] = {"
|
||||
|
||||
command_list "$1" |
|
||||
echo "$1" |
|
||||
while read cmd rest
|
||||
do
|
||||
synopsis=
|
||||
@ -93,6 +93,9 @@ do
|
||||
shift
|
||||
done
|
||||
|
||||
commands="$(command_list "$1")"
|
||||
categories="$(category_list "$commands")"
|
||||
|
||||
echo "/* Automatically generated by generate-cmdlist.sh */
|
||||
struct cmdname_help {
|
||||
const char *name;
|
||||
@ -100,8 +103,8 @@ struct cmdname_help {
|
||||
uint32_t category;
|
||||
};
|
||||
"
|
||||
define_categories "$1"
|
||||
define_categories "$categories"
|
||||
echo
|
||||
define_category_names "$1"
|
||||
define_category_names "$categories"
|
||||
echo
|
||||
print_command_list "$1"
|
||||
print_command_list "$commands"
|
||||
|
Loading…
Reference in New Issue
Block a user