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 () {
|
category_list () {
|
||||||
command_list "$1" |
|
echo "$1" |
|
||||||
cut -d' ' -f2- |
|
cut -d' ' -f2- |
|
||||||
tr ' ' '\012' |
|
tr ' ' '\012' |
|
||||||
grep -v '^$' |
|
grep -v '^$' |
|
||||||
@ -37,7 +37,7 @@ define_categories () {
|
|||||||
echo
|
echo
|
||||||
echo "/* Command categories */"
|
echo "/* Command categories */"
|
||||||
bit=0
|
bit=0
|
||||||
category_list "$1" |
|
echo "$1" |
|
||||||
while read cat
|
while read cat
|
||||||
do
|
do
|
||||||
echo "#define CAT_$cat (1UL << $bit)"
|
echo "#define CAT_$cat (1UL << $bit)"
|
||||||
@ -51,7 +51,7 @@ define_category_names () {
|
|||||||
echo "/* Category names */"
|
echo "/* Category names */"
|
||||||
echo "static const char *category_names[] = {"
|
echo "static const char *category_names[] = {"
|
||||||
bit=0
|
bit=0
|
||||||
category_list "$1" |
|
echo "$1" |
|
||||||
while read cat
|
while read cat
|
||||||
do
|
do
|
||||||
echo " \"$cat\", /* (1UL << $bit) */"
|
echo " \"$cat\", /* (1UL << $bit) */"
|
||||||
@ -64,7 +64,7 @@ define_category_names () {
|
|||||||
print_command_list () {
|
print_command_list () {
|
||||||
echo "static struct cmdname_help command_list[] = {"
|
echo "static struct cmdname_help command_list[] = {"
|
||||||
|
|
||||||
command_list "$1" |
|
echo "$1" |
|
||||||
while read cmd rest
|
while read cmd rest
|
||||||
do
|
do
|
||||||
synopsis=
|
synopsis=
|
||||||
@ -93,6 +93,9 @@ do
|
|||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
|
|
||||||
|
commands="$(command_list "$1")"
|
||||||
|
categories="$(category_list "$commands")"
|
||||||
|
|
||||||
echo "/* Automatically generated by generate-cmdlist.sh */
|
echo "/* Automatically generated by generate-cmdlist.sh */
|
||||||
struct cmdname_help {
|
struct cmdname_help {
|
||||||
const char *name;
|
const char *name;
|
||||||
@ -100,8 +103,8 @@ struct cmdname_help {
|
|||||||
uint32_t category;
|
uint32_t category;
|
||||||
};
|
};
|
||||||
"
|
"
|
||||||
define_categories "$1"
|
define_categories "$categories"
|
||||||
echo
|
echo
|
||||||
define_category_names "$1"
|
define_category_names "$categories"
|
||||||
echo
|
echo
|
||||||
print_command_list "$1"
|
print_command_list "$commands"
|
||||||
|
Loading…
Reference in New Issue
Block a user