generate-cmdlist.sh: do not shell out to "sed"
Replace the "sed" invocation in get_synopsis() with a pure-shell version. This speeds up generate-cmdlist.sh significantly. Compared to HEAD~ (old) and "master" we are, according to hyperfine(1): 'sh generate-cmdlist.sh command-list.txt' ran 12.69 ± 5.01 times faster than 'sh generate-cmdlist.sh.old command-list.txt' 18.34 ± 3.03 times faster than 'sh generate-cmdlist.sh.master command-list.txt' Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King committed
Nov 5, 2021 at 15:08 UTC
3ebeb1d6b10b538b1c1ca05a260e6ad41ea80fd7
1 file changed
+12
-11
generate-cmdlist.sh
+12
-11
@@ -17,16 +17,6 @@ category_list () {
17
LC_ALL=C sort -u
18
}
19
20
-get_synopsis () {
21
- sed -n '
22
- /^NAME/,/'"$1"'/H
23
- ${
24
- x
25
- s/.*'"$1"' - \(.*\)/N_("\1")/
26
- p
27
- }' "Documentation/$1.txt"
28
-}
29
-
20
define_categories () {
21
echo
22
echo "/* Command categories */"
@@ -61,7 +51,18 @@ print_command_list () {
51
command_list "$1" |
52
while read cmd rest
53
do
64
- printf " { \"$cmd\", $(get_synopsis $cmd), 0"
54
+ synopsis=
55
+ while read line
56
+ do
57
+ case "$line" in
58
+ "$cmd - "*)
59
+ synopsis=${line#$cmd - }
60
+ break
61
+ ;;
62
+ esac
63
+ done <"Documentation/$cmd.txt"
64
+
65
+ printf '\t{ "%s", N_("%s"), 0' "$cmd" "$synopsis"
66
printf " | CAT_%s" $rest
67
echo " },"
68
done