mirror of
https://github.com/git/git.git
synced 2025-03-30 19:50:22 +00:00
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
This commit is contained in:
commit
4249d850cf
@ -17,6 +17,7 @@ TEST_LINT ?= test-lint-duplicates test-lint-executable
|
|||||||
|
|
||||||
# Shell quote;
|
# Shell quote;
|
||||||
SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
|
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))
|
T = $(sort $(wildcard t[0-9][0-9][0-9][0-9]-*.sh))
|
||||||
TSVN = $(sort $(wildcard t91[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
|
clean: clean-except-prove-cache
|
||||||
$(RM) .prove
|
$(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:
|
test-lint-duplicates:
|
||||||
@dups=`echo $(T) | tr ' ' '\n' | sed 's/-.*//' | sort | uniq -d` && \
|
@dups=`echo $(T) | tr ' ' '\n' | sed 's/-.*//' | sort | uniq -d` && \
|
||||||
@ -56,6 +57,9 @@ test-lint-executable:
|
|||||||
test -z "$$bad" || { \
|
test -z "$$bad" || { \
|
||||||
echo >&2 "non-executable tests:" $$bad; exit 1; }
|
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)
|
aggregate-results-and-cleanup: $(T)
|
||||||
$(MAKE) aggregate-results
|
$(MAKE) aggregate-results
|
||||||
$(MAKE) clean
|
$(MAKE) clean
|
||||||
@ -88,7 +92,7 @@ test-results:
|
|||||||
mkdir -p test-results
|
mkdir -p test-results
|
||||||
|
|
||||||
test-results/git-smoke.tar.gz: test-results
|
test-results/git-smoke.tar.gz: test-results
|
||||||
$(PERL_PATH) ./harness \
|
'$(PERL_PATH_SQ)' ./harness \
|
||||||
--archive="test-results/git-smoke.tar.gz" \
|
--archive="test-results/git-smoke.tar.gz" \
|
||||||
$(T)
|
$(T)
|
||||||
|
|
||||||
|
27
t/check-non-portable-shell.pl
Executable file
27
t/check-non-portable-shell.pl
Executable file
@ -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;
|
Loading…
x
Reference in New Issue
Block a user