use get_tagged_oid()
[gitweb.git] / t / check-non-portable-shell.pl
index d5823f71d8d57ec92404d5cceabd86d5ab86af53..38bfeebd881ae8930d965536a42305771b066477 100755 (executable)
@@ -27,23 +27,28 @@ sub err {
        close $f;
 }
 
+my $line = '';
 while (<>) {
        chomp;
+       $line .= $_;
        # stitch together incomplete lines (those ending with "\")
-       while (s/\\$//) {
-               $_ .= readline;
-               chomp;
-       }
+       next if $line =~ s/\\$//;
 
-       /\bsed\s+-i/ and err 'sed -i is not portable';
+       $_ = $line;
+       /\bcp\s+-a/ and err 'cp -a is not portable';
+       /\bsed\s+-[^efn]\s+/ and err 'sed option not portable (use only -n, -e, -f)';
        /\becho\s+-[neE]/ and err 'echo with option is not portable (use printf)';
        /^\s*declare\s+/ and err 'arrays/declare not portable';
        /^\s*[^#]\s*which\s/ and err 'which is not portable (use type)';
        /\btest\s+[^=]*==/ and err '"test a == b" is not portable (use =)';
        /\bwc -l.*"\s*=/ and err '`"$(wc -l)"` is not portable (use test_line_count)';
+       /\bhead\s+-c\b/ and err 'head -c is not portable (use test_copy_bytes BYTES <file >out)';
+       /(?:\$\(seq|^\s*seq\b)/ and err 'seq is not portable (use test_seq)';
+       /\bgrep\b.*--file\b/ and err 'grep --file FILE is not portable (use grep -f FILE)';
        /\bexport\s+[A-Za-z0-9_]*=/ and err '"export FOO=bar" is not portable (use FOO=bar && export FOO)';
        /^\s*([A-Z0-9_]+=(\w+|(["']).*?\3)\s+)+(\w+)/ and exists($func{$4}) and
                err '"FOO=bar shell_func" assignment extends beyond "shell_func"';
+       $line = '';
        # this resets our $. for each file
        close ARGV if eof;
 }