diff options
author | Junio C Hamano <gitster@pobox.com> | 2013-01-10 13:47:04 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-01-10 13:47:04 -0800 |
commit | 4249d850cff0d1d36b3a9c4cf38066c50365cfd1 (patch) | |
tree | cdca9f6c091de6d5b462a5880029d52127f82fdb | |
parent | 6a37cee10abe36fbbf635129d5ae114dbf96d395 (diff) | |
parent | c7ce70ace9794a8f0b4774d803536a7ecdf318de (diff) | |
download | git-4249d850cff0d1d36b3a9c4cf38066c50365cfd1.tar.gz |
Merge branch 'tb/test-shell-lint'
Check for common mistakes in the test scripts, based on simple
pattern-matching.
* tb/test-shell-lint:
test: Add check-non-portable-shell.pl
-rw-r--r-- | t/Makefile | 8 | ||||
-rwxr-xr-x | t/check-non-portable-shell.pl | 27 |
2 files changed, 33 insertions, 2 deletions
diff --git a/t/Makefile b/t/Makefile index 5c6de8169b..1923cc104b 100644 --- a/t/Makefile +++ b/t/Makefile @@ -17,6 +17,7 @@ TEST_LINT ?= test-lint-duplicates test-lint-executable # Shell quote; SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH)) +PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH)) T = $(sort $(wildcard t[0-9][0-9][0-9][0-9]-*.sh)) TSVN = $(sort $(wildcard t91[0-9][0-9]-*.sh)) @@ -44,7 +45,7 @@ clean-except-prove-cache: clean: clean-except-prove-cache $(RM) .prove -test-lint: test-lint-duplicates test-lint-executable +test-lint: test-lint-duplicates test-lint-executable test-lint-shell-syntax test-lint-duplicates: @dups=`echo $(T) | tr ' ' '\n' | sed 's/-.*//' | sort | uniq -d` && \ @@ -56,6 +57,9 @@ test-lint-executable: test -z "$$bad" || { \ echo >&2 "non-executable tests:" $$bad; exit 1; } +test-lint-shell-syntax: + @'$(PERL_PATH_SQ)' check-non-portable-shell.pl $(T) + aggregate-results-and-cleanup: $(T) $(MAKE) aggregate-results $(MAKE) clean @@ -88,7 +92,7 @@ test-results: mkdir -p test-results test-results/git-smoke.tar.gz: test-results - $(PERL_PATH) ./harness \ + '$(PERL_PATH_SQ)' ./harness \ --archive="test-results/git-smoke.tar.gz" \ $(T) diff --git a/t/check-non-portable-shell.pl b/t/check-non-portable-shell.pl new file mode 100755 index 0000000000..8b5a71dc05 --- /dev/null +++ b/t/check-non-portable-shell.pl @@ -0,0 +1,27 @@ +#!/usr/bin/perl + +# Test t0000..t9999.sh for non portable shell scripts +# This script can be called with one or more filenames as parameters + +use strict; +use warnings; + +my $exit_code=0; + +sub err { + my $msg = shift; + print "$ARGV:$.: error: $msg: $_\n"; + $exit_code = 1; +} + +while (<>) { + chomp; + /^\s*sed\s+-i/ and err 'sed -i is not portable'; + /^\s*echo\s+-n/ and err 'echo -n is not portable (please use printf)'; + /^\s*declare\s+/ and err 'arrays/declare not portable'; + /^\s*[^#]\s*which\s/ and err 'which is not portable (please use type)'; + /test\s+[^=]*==/ and err '"test a == b" is not portable (please use =)'; + # this resets our $. for each file + close ARGV if eof; +} +exit $exit_code; |