| #!/usr/bin/perl -w |
| # SPDX-License-Identifier: GPL-2.0 |
| # Copyright (c) 2008 Silicon Graphics, Inc. All Rights Reserved. |
| # |
| # Print headers of given tests |
| # Accepted parameter types: |
| # - nothing - list all tests from all subdirectories in tests/* |
| # - tests/DIR - list all tests from DIR |
| # - tests/DIR/123 - show header from single test |
| |
| use strict; |
| |
| use Getopt::Long; |
| |
| sub help(); |
| sub get_qa_header($); |
| sub get_qa_tests; |
| |
| my %opt; |
| |
| my @oa = ( |
| ['--help|?', "Show this help message.", |
| \$opt{'help'}], |
| ['--head|h', "Shows only the head of the QA test", |
| \$opt{'head'}], |
| ['--body|b', "Shows only the body of the QA test.", |
| \$opt{'body'}], |
| ['--one-line|1', "Output everything on a single line.", |
| \$opt{'oneline'}], |
| ); |
| |
| # black magic |
| GetOptions(map { @{$_}[0] => @{$_}[2] } @oa); |
| |
| if ($opt{'help'}) { |
| die help(); |
| } |
| |
| my @qatests; |
| |
| if (!@ARGV) { |
| my $d="tests"; |
| opendir(DIR, $d); |
| map { push @qatests,get_qa_tests("$d/$_") if -d "$d/$_" } readdir(DIR); |
| closedir(DIR); |
| } |
| |
| foreach (@ARGV) { |
| push @qatests,$_ if -f && /\d{3}$/; |
| push @qatests,get_qa_tests($_) if -d; |
| } |
| |
| foreach (@qatests) { |
| my @h = get_qa_header($_); |
| |
| if ($opt{'head'}) { |
| @h = shift @h; |
| } elsif ($opt{'body'}) { |
| shift @h; |
| shift @h |
| } |
| |
| if ($opt{'oneline'}) { |
| print map {s/\n/ /; $_} @h; |
| print "\n"; |
| } else { |
| print @h; |
| } |
| |
| print "--------------------------------------------------\n" unless (@qatests < 2); |
| } |
| |
| sub help() { |
| my $sa = ''; |
| foreach (@oa) { |
| # local $_ = @{$_}[0]; |
| @{$_}[0] =~ s/=(.*)$//; |
| @{$_}[0] =~ s/\|/ \| -/; |
| @{$_}[0] =~ s/^/\[ /; |
| @{$_}[0] =~ s/$/ \] /; |
| $sa .= @{$_}[0]; |
| } |
| |
| print "Usage: $0\t$sa\n"; |
| foreach (@oa) { |
| $$_[0] =~ s/\|/\t\|/; |
| print "\t$$_[0]\t$$_[1]\n"; |
| } |
| } |
| |
| sub get_qa_header($) { |
| my $f = shift || die "need an argument"; |
| my @l; |
| |
| open(my $FH, $f) || die "couldn't open '$f': $!"; |
| while (<$FH>) { |
| #ignore. |
| m/^#\!/ and next; # shebang |
| m/^# SPDX/i and next; # SPDX tags |
| m/^# Copyright/i and next; # Copyright tags |
| m/^#\s*\-{10}/ and last; # dashed lines |
| m/^\. \.\/common\/preamble/ and last; # test start |
| |
| s/^# *//; |
| |
| push @l, $_; |
| } |
| close($FH); |
| return @l; |
| } |
| |
| sub get_qa_tests { |
| my $d = shift || $ENV{'PWD'}; |
| |
| opendir(my $DIR, $d) || die "can't opendir $d: $!"; |
| my @qa = sort grep { m/^\d\d\d$/ && -f "$d/$_" } readdir($DIR); |
| closedir($DIR); |
| return map { $_ = "$d/$_" } @qa; |
| } |