diff options
Diffstat (limited to 'Porting/newtests-perldelta.pl')
-rw-r--r-- | Porting/newtests-perldelta.pl | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/Porting/newtests-perldelta.pl b/Porting/newtests-perldelta.pl new file mode 100644 index 0000000000..33fe0bc9f7 --- /dev/null +++ b/Porting/newtests-perldelta.pl @@ -0,0 +1,88 @@ +#!perl -w +use 5.010; +use strict; +use Getopt::Long; +use Pod::Usage; +use Module::CoreList; +GetOptions( + 'spec|s:s' => \my $manifest, +) or pod2usage(); + +=head1 SYNOPSIS + + newtests-perldelta.pl [FROM TO] + +Output the added tests between the two last released versions of Perl + + newtests-perldelta.pl + +Output the added tests between the version tagged v5.11.1 +and this version + + newtests-perldelta.pl v5.11.1 HEAD + +=cut + +my $corelist = \%Module::CoreList::version; +my @versions = sort keys %$corelist; + +# by default, compare latest two version in CoreList; +my ($from, $to) = @ARGV; + +# Convert the numbers to git version tags +sub num2git { + my ($num) = @_; + $num =~ /^(5)\.(\d\d\d)(\d\d\d)/ + or die "Couldn't make sense of version number '$num'"; + sprintf 'v%d.%d.%d', $1,$2,$3; +}; + +$from //= num2git($versions[-2]); # / +$to //= num2git($versions[-1]); # / +$manifest //= 'MANIFEST'; # / + +warn "Finding newly added tests between $from..$to\n"; + +my @new_tests = + grep { m!^[-+](?:t|ext)/.*\.t\s+! } # only added/removed tests + `git diff $from..$to -- $manifest`; +chomp @new_tests; +if (! @new_tests) { + die "No new tests found between $from and $to."; +}; + +# Now remove those files whose lines were just shuffled around +# within MANIFEST +my %desc; +my %removed; +for (@new_tests) { + die "Weird diff line '$_' " unless /^([+-])(\S+\.t)(?:\s+(.*))?$/; + my ($mod,$file,$desc) = ($1,$2,$3); + $desc //= '<no description>'; # / to placate Padre highlighting + if ($mod eq '-') { + $removed{ $file } = $file; + }; + $desc{ $file } = $desc; +}; + +print <<HEAD; + +=head1 New Tests + +Many modules updated from CPAN incorporate new tests. + +=over 4 + +HEAD + +for my $file (sort keys %desc) { + next if $removed{ $file }; + print <<ITEM; +=item $file + +$desc{ $file } + +ITEM +}; + +say "=back\n";
\ No newline at end of file |