diff mbox series

[v2,10/10] generate-cmdlist.sh: replace "cut", "tr" and "grep" with pure-shell

Message ID patch-v2-10.10-e10a43756d1-20211022T193027Z-avarab@gmail.com (mailing list archive)
State New, archived
Headers show
Series Makefile: make generate-cmdlist.sh much faster | expand

Commit Message

Ævar Arnfjörð Bjarmason Oct. 22, 2021, 7:36 p.m. UTC
Extend the pure-shell parsing of command-list.txt by using having
command_list() take an argument indicating whether we're interested in
the "$cmd" part of the line, or just the "$rest".

That takes care of the "cut -d", and printf's auto-repeat feature can
replace the "tr". We don't need the "grep -v" either, as we're not
emitting any empty lines here (the command-list.txt doesn't have any).

This doesn't make things any faster or slower in my tests, but as with
the preceding commit let's do it just to get rid of command
invocations, it'll probably help on e.g. Windows.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 generate-cmdlist.sh | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

Comments

Junio C Hamano Oct. 23, 2021, 10:26 p.m. UTC | #1
Ævar Arnfjörð Bjarmason  <avarab@gmail.com> writes:

> Extend the pure-shell parsing of command-list.txt by using having

using having???

> command_list() take an argument indicating whether we're interested in
> the "$cmd" part of the line, or just the "$rest".

OK, --no-cat stands for --no-category?  Even if (or especially if,
perhaps) you do not bother to parse the option in the command_list
helper, it would help the readers if it is spelled out.  I somehow
thought if this option has anything to do with "/bin/cat".

> That takes care of the "cut -d", and printf's auto-repeat feature can
> replace the "tr". We don't need the "grep -v" either, as we're not
> emitting any empty lines here (the command-list.txt doesn't have any).

It may make sense to ensure that the case arm won't feed an empty 
line that made cmd an empty by tightening the condition.

	case "$cmd" in
	"#"*)
		continue
		;; 
-	*)
+	?*)
		case "$exclude_programs" in
		*:"$cmd":*)
			;;

If anything, that would serve as a clear documentation that we are
safe even when the input has an empty line.
diff mbox series

Patch

diff --git a/generate-cmdlist.sh b/generate-cmdlist.sh
index 2b184bbc65f..394443c66df 100755
--- a/generate-cmdlist.sh
+++ b/generate-cmdlist.sh
@@ -17,7 +17,12 @@  command_list () {
 				*":$cmd:"*)
 				;;
 			*)
-				echo "$cmd $rest"
+				if test -n "$1"
+				then
+					printf "%s\n" $rest
+				else
+					echo "$cmd $rest"
+				fi
 				;;
 			esac
 		esac
@@ -25,10 +30,7 @@  command_list () {
 }
 
 category_list () {
-	command_list <"$1" |
-	cut -d' ' -f2- |
-	tr ' ' '\012' |
-	grep -v '^$' |
+	command_list --no-cat <"$1" |
 	LC_ALL=C sort -u
 }