Thread (2 messages) 2 messages, 2 authors, 2017-12-23

Re: [PATCH v3 1/1] check-non-portable-shell.pl: Quoted `wc -l` is not portable

From: Junio C Hamano <hidden>
Date: 2017-12-22 21:08:08

tboegi@web.de writes:
Reviewed-by: Johannes Schindelin <redacted>
Signed-off-by: Torsten Bögershausen <redacted>
I'll flip these and add a helped-by to credit Eric.

    check-non-portable-shell.pl: `wc -l` may have leading WS
    
    Test scripts count number of lines in an output and check it againt
    its expectation.  fb3340a6 ("test-lib: introduce test_line_count to
    measure files", 2010-10-31) introduced a helper to show a failure in
    such a test in a more readable way than comparing `wc -l` output with
    a number.
    
    Besides, on some platforms, "$(wc -l <file)" is padded with leading
    whitespace on the left, so
    
            test "$(wc -l <file)" = 4
    
    would not work (most notably on macosX); the users of test_line_count
    helper would not suffer from such a portability glitch.
    
    Add a check in check-non-portable-shell.pl to find '"' between
    `wc -l` and '=' and hint the user about test_line_count().
    
    Signed-off-by: Torsten Bögershausen [off-list ref]
    Reviewed-by: Johannes Schindelin [off-list ref]
    Helped-by: Eric Sunshine [off-list ref]
    Signed-off-by: Junio C Hamano [off-list ref]
quoted hunk
---
 t/check-non-portable-shell.pl | 1 +
 1 file changed, 1 insertion(+)
diff --git a/t/check-non-portable-shell.pl b/t/check-non-portable-shell.pl
index 03dc9d285..e07f02843 100755
Use () around the hint.
Thanks to Eric for the sharp eyes.
--- a/t/check-non-portable-shell.pl
+++ b/t/check-non-portable-shell.pl
Don't try to apply this patch to your tree yourself ;-)
quoted hunk
@@ -21,6 +21,7 @@ while (<>) {
 	/^\s*declare\s+/ and err 'arrays/declare not portable';
 	/^\s*[^#]\s*which\s/ and err 'which is not portable (please use type)';
 	/\btest\s+[^=]*==/ and err '"test a == b" is not portable (please use =)';
+	/\bwc -l.*"\s*=/ and err '`"$(wc -l)"` is not portable (please use test_line_count)';
 	/\bexport\s+[A-Za-z0-9_]*=/ and err '"export FOO=bar" is not portable (please use FOO=bar && export FOO)';
 	# this resets our $. for each file
 	close ARGV if eof;
Thanks.  The dq before \s*= is rather cute ;-)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help