In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/fa25ff3a5478e084688655a08731d7df58e2fc6a?hp=185c2e96081e0fd9b6c448a8db6ac4ca85ff1dd4>
- Log ----------------------------------------------------------------- commit fa25ff3a5478e084688655a08731d7df58e2fc6a Author: Steve Hay <[email protected]> Date: Wed Jul 20 13:50:37 2016 +0100 Fix typo in perldelta M pod/perldelta.pod commit 70f2a5091a5063f07e3878e79723c0e19f050125 Author: Steve Hay <[email protected]> Date: Wed Jul 20 13:43:21 2016 +0100 perldelta - Fill in Modules and Pragmata M pod/perldelta.pod commit 2c7b07fe2d3310b6d79622edc2ad42681ced0156 Author: Steve Hay <[email protected]> Date: Wed Jul 20 13:33:07 2016 +0100 perldelta - Fill in rt.perl.org links M pod/perldelta.pod commit 216c09bb022d4d8e6d7c5470ac9165b21972c860 Author: Steve Hay <[email protected]> Date: Wed Jul 20 13:24:10 2016 +0100 perldelta - Fill in Testing M pod/perldelta.pod commit ce6646d7d570b626182162aa75e56ae90de6ffe1 Author: Steve Hay <[email protected]> Date: Wed Jul 20 13:21:54 2016 +0100 perldelta - Fill in Documentation M pod/perldelta.pod commit fb0f05f2353c65ed202032af752c353797cf04e6 Author: Steve Hay <[email protected]> Date: Wed Jul 20 13:01:07 2016 +0100 perldelta - Fill in New Diagnostics M pod/perldelta.pod commit 68328fa624596a4e7038ec0736d62dcc9a6d93dc Author: Steve Hay <[email protected]> Date: Wed Jul 20 12:52:59 2016 +0100 perldelta - Wrapping/formatting M pod/perldelta.pod commit 1df6cb38d360c2ed25c995ad2e35fb989c7a8337 Author: Steve Hay <[email protected]> Date: Wed Jul 20 12:39:57 2016 +0100 perldelta - Fill in "fixed in" versions for Errata items (The perl #126182 problem was reported with 5.23.4, so certainly wasn't *broken* in 5.24.0 as the note originally said. It was in fact *fixed* in that version (actually, 5.23.9) by a series of commits in early March.) M pod/perldelta.pod commit 874195d6e9ba2adfe84c25f97f47017428253e7b Author: Steve Hay <[email protected]> Date: Wed Jul 20 12:36:34 2016 +0100 perldelta - Remove most boilerplate This moves one item ("scalar(%hash) return signature changed") from Performance Enhancements to Incompatible Changes, where I think it is more apt (although it does also involve a small performance enhancement). M pod/perldelta.pod commit d6c223934daeecf11e9c1b28c659ea51ac2fd0cc Author: Steve Hay <[email protected]> Date: Wed Jul 20 12:08:48 2016 +0100 Module-Metadata has another customized test script M Porting/Maintainers.pl M t/porting/customized.dat commit c9de3de896125d037ac2d8c66c05dbb5dd6b1520 Author: Steve Hay <[email protected]> Date: Wed Jul 20 12:05:19 2016 +0100 Encode has some customized test scripts M Porting/Maintainers.pl M t/porting/customized.dat commit 0b4ffce69122f064651915707455a21d480d61c3 Author: Steve Hay <[email protected]> Date: Wed Jul 20 11:55:16 2016 +0100 Upgrade Test-Simple from version 1.302040 to 1.302045 M MANIFEST M Porting/Maintainers.pl M cpan/Test-Simple/lib/Test/Builder.pm M cpan/Test-Simple/lib/Test/Builder/Formatter.pm M cpan/Test-Simple/lib/Test/Builder/Module.pm M cpan/Test-Simple/lib/Test/Builder/Tester.pm M cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm M cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm M cpan/Test-Simple/lib/Test/More.pm M cpan/Test-Simple/lib/Test/Simple.pm M cpan/Test-Simple/lib/Test/Tester.pm M cpan/Test-Simple/lib/Test/Tester/Capture.pm M cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm M cpan/Test-Simple/lib/Test/Tester/Delegate.pm M cpan/Test-Simple/lib/Test/use/ok.pm M cpan/Test-Simple/lib/Test2.pm M cpan/Test-Simple/lib/Test2/API.pm M cpan/Test-Simple/lib/Test2/API/Breakage.pm M cpan/Test-Simple/lib/Test2/API/Context.pm M cpan/Test-Simple/lib/Test2/API/Instance.pm M cpan/Test-Simple/lib/Test2/API/Stack.pm M cpan/Test-Simple/lib/Test2/Event.pm M cpan/Test-Simple/lib/Test2/Event/Bail.pm M cpan/Test-Simple/lib/Test2/Event/Diag.pm M cpan/Test-Simple/lib/Test2/Event/Exception.pm M cpan/Test-Simple/lib/Test2/Event/Generic.pm M cpan/Test-Simple/lib/Test2/Event/Info.pm M cpan/Test-Simple/lib/Test2/Event/Note.pm M cpan/Test-Simple/lib/Test2/Event/Ok.pm M cpan/Test-Simple/lib/Test2/Event/Plan.pm M cpan/Test-Simple/lib/Test2/Event/Skip.pm M cpan/Test-Simple/lib/Test2/Event/Subtest.pm M cpan/Test-Simple/lib/Test2/Event/Waiting.pm M cpan/Test-Simple/lib/Test2/Formatter.pm M cpan/Test-Simple/lib/Test2/Formatter/TAP.pm M cpan/Test-Simple/lib/Test2/Hub.pm M cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm M cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm M cpan/Test-Simple/lib/Test2/Hub/Subtest.pm M cpan/Test-Simple/lib/Test2/IPC.pm M cpan/Test-Simple/lib/Test2/IPC/Driver.pm M cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm M cpan/Test-Simple/lib/Test2/Util.pm M cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm M cpan/Test-Simple/lib/Test2/Util/HashBase.pm M cpan/Test-Simple/lib/Test2/Util/Trace.pm M cpan/Test-Simple/lib/ok.pm M cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t A cpan/Test-Simple/t/Test2/regression/693_ipc_ordering.t commit e8d5ab7b269b27852f432c140e9d021f103b50e0 Author: Steve Hay <[email protected]> Date: Wed Jul 20 11:49:22 2016 +0100 Upgrade libnet from version 3.08 to 3.09 M Porting/Maintainers.pl M cpan/libnet/Makefile.PL M cpan/libnet/lib/Net/Cmd.pm M cpan/libnet/lib/Net/Config.pm M cpan/libnet/lib/Net/Domain.pm M cpan/libnet/lib/Net/FTP.pm M cpan/libnet/lib/Net/FTP/A.pm M cpan/libnet/lib/Net/FTP/E.pm M cpan/libnet/lib/Net/FTP/I.pm M cpan/libnet/lib/Net/FTP/L.pm M cpan/libnet/lib/Net/FTP/dataconn.pm M cpan/libnet/lib/Net/NNTP.pm M cpan/libnet/lib/Net/Netrc.pm M cpan/libnet/lib/Net/POP3.pm M cpan/libnet/lib/Net/SMTP.pm M cpan/libnet/lib/Net/Time.pm M cpan/libnet/lib/Net/libnetFAQ.pod M cpan/libnet/t/datasend.t M cpan/libnet/t/nntp_ipv6.t M cpan/libnet/t/pop3_ipv6.t M cpan/libnet/t/smtp_ipv6.t ----------------------------------------------------------------------- Summary of changes: MANIFEST | 1 + Porting/Maintainers.pl | 25 +- cpan/Test-Simple/lib/Test/Builder.pm | 4 +- cpan/Test-Simple/lib/Test/Builder/Formatter.pm | 2 +- cpan/Test-Simple/lib/Test/Builder/Module.pm | 2 +- cpan/Test-Simple/lib/Test/Builder/Tester.pm | 2 +- cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm | 2 +- cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm | 2 +- cpan/Test-Simple/lib/Test/More.pm | 2 +- cpan/Test-Simple/lib/Test/Simple.pm | 2 +- cpan/Test-Simple/lib/Test/Tester.pm | 2 +- cpan/Test-Simple/lib/Test/Tester/Capture.pm | 2 +- cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm | 2 +- cpan/Test-Simple/lib/Test/Tester/Delegate.pm | 2 +- cpan/Test-Simple/lib/Test/use/ok.pm | 2 +- cpan/Test-Simple/lib/Test2.pm | 2 +- cpan/Test-Simple/lib/Test2/API.pm | 2 +- cpan/Test-Simple/lib/Test2/API/Breakage.pm | 2 +- cpan/Test-Simple/lib/Test2/API/Context.pm | 2 +- cpan/Test-Simple/lib/Test2/API/Instance.pm | 2 +- cpan/Test-Simple/lib/Test2/API/Stack.pm | 2 +- cpan/Test-Simple/lib/Test2/Event.pm | 2 +- cpan/Test-Simple/lib/Test2/Event/Bail.pm | 2 +- cpan/Test-Simple/lib/Test2/Event/Diag.pm | 2 +- cpan/Test-Simple/lib/Test2/Event/Exception.pm | 2 +- cpan/Test-Simple/lib/Test2/Event/Generic.pm | 2 +- cpan/Test-Simple/lib/Test2/Event/Info.pm | 2 +- cpan/Test-Simple/lib/Test2/Event/Note.pm | 2 +- cpan/Test-Simple/lib/Test2/Event/Ok.pm | 2 +- cpan/Test-Simple/lib/Test2/Event/Plan.pm | 2 +- cpan/Test-Simple/lib/Test2/Event/Skip.pm | 2 +- cpan/Test-Simple/lib/Test2/Event/Subtest.pm | 2 +- cpan/Test-Simple/lib/Test2/Event/Waiting.pm | 2 +- cpan/Test-Simple/lib/Test2/Formatter.pm | 2 +- cpan/Test-Simple/lib/Test2/Formatter/TAP.pm | 2 +- cpan/Test-Simple/lib/Test2/Hub.pm | 2 +- cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm | 2 +- .../lib/Test2/Hub/Interceptor/Terminator.pm | 2 +- cpan/Test-Simple/lib/Test2/Hub/Subtest.pm | 2 +- cpan/Test-Simple/lib/Test2/IPC.pm | 2 +- cpan/Test-Simple/lib/Test2/IPC/Driver.pm | 2 +- cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm | 149 +++++-- cpan/Test-Simple/lib/Test2/Util.pm | 2 +- cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm | 2 +- cpan/Test-Simple/lib/Test2/Util/HashBase.pm | 2 +- cpan/Test-Simple/lib/Test2/Util/Trace.pm | 2 +- cpan/Test-Simple/lib/ok.pm | 2 +- .../Test-Simple/t/Test2/modules/IPC/Driver/Files.t | 242 +++++++++++- .../t/Test2/regression/693_ipc_ordering.t | 30 ++ cpan/libnet/Makefile.PL | 4 +- cpan/libnet/lib/Net/Cmd.pm | 10 +- cpan/libnet/lib/Net/Config.pm | 2 +- cpan/libnet/lib/Net/Domain.pm | 2 +- cpan/libnet/lib/Net/FTP.pm | 4 +- cpan/libnet/lib/Net/FTP/A.pm | 2 +- cpan/libnet/lib/Net/FTP/E.pm | 2 +- cpan/libnet/lib/Net/FTP/I.pm | 2 +- cpan/libnet/lib/Net/FTP/L.pm | 2 +- cpan/libnet/lib/Net/FTP/dataconn.pm | 2 +- cpan/libnet/lib/Net/NNTP.pm | 10 +- cpan/libnet/lib/Net/Netrc.pm | 2 +- cpan/libnet/lib/Net/POP3.pm | 4 +- cpan/libnet/lib/Net/SMTP.pm | 14 +- cpan/libnet/lib/Net/Time.pm | 2 +- cpan/libnet/lib/Net/libnetFAQ.pod | 2 +- cpan/libnet/t/datasend.t | 2 - cpan/libnet/t/nntp_ipv6.t | 1 + cpan/libnet/t/pop3_ipv6.t | 1 + cpan/libnet/t/smtp_ipv6.t | 1 + pod/perldelta.pod | 431 ++++++++------------- t/porting/customized.dat | 7 + 71 files changed, 665 insertions(+), 381 deletions(-) create mode 100644 cpan/Test-Simple/t/Test2/regression/693_ipc_ordering.t diff --git a/MANIFEST b/MANIFEST index a97d900..8f1b65e 100644 --- a/MANIFEST +++ b/MANIFEST @@ -2771,6 +2771,7 @@ cpan/Test-Simple/t/Test2/modules/Util.t cpan/Test-Simple/t/Test2/modules/Util/ExternalMeta.t cpan/Test-Simple/t/Test2/modules/Util/HashBase.t cpan/Test-Simple/t/Test2/modules/Util/Trace.t +cpan/Test-Simple/t/Test2/regression/693_ipc_ordering.t cpan/Test-Simple/t/Test2/regression/gh_16.t cpan/Test-Simple/t/Test2/regression/ipc_files_abort_exit.t cpan/Test-Simple/t/tools.pl diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 38e6eca..b617a1a 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -388,8 +388,15 @@ use File::Glob qw(:case); 'DISTRIBUTION' => 'DANKOGAI/Encode-2.84.tar.gz', 'FILES' => q[cpan/Encode], CUSTOMIZED => [ - qw( encoding.pm ), - 'Byte/Makefile.PL', + qw( encoding.pm + Byte/Makefile.PL + t/enc_data.t + t/enc_eucjp.t + t/enc_module.t + t/enc_utf8.t + t/encoding.t + t/jperl.t + ), ], }, @@ -666,7 +673,7 @@ use File::Glob qw(:case); }, 'libnet' => { - 'DISTRIBUTION' => 'SHAY/libnet-3.08.tar.gz', + 'DISTRIBUTION' => 'SHAY/libnet-3.09.tar.gz', 'FILES' => q[cpan/libnet], 'EXCLUDED' => [ qw( Configure @@ -816,7 +823,8 @@ use File::Glob qw(:case); qr{^xt}, ], # https://rt.perl.org/Ticket/Display.html?id=128160 - 'CUSTOMIZED' => [ qw[ t/extract-package.t ] ], + # https://github.com/Perl-Toolchain-Gang/Module-Metadata/commit/59b3f5b45ff862a1a422a409518255736fe81b66 + 'CUSTOMIZED' => [ qw[ t/extract-package.t t/metadata.t ] ], }, 'Net::Ping' => { @@ -1058,15 +1066,12 @@ use File::Glob qw(:case); }, 'Test::Simple' => { - 'DISTRIBUTION' => 'EXODIST/Test-Simple-1.302040.tar.gz', + 'DISTRIBUTION' => 'EXODIST/Test-Simple-1.302045.tar.gz', 'FILES' => q[cpan/Test-Simple], 'EXCLUDED' => [ - qr{^xt}, + qr{^examples/}, + qr{^xt/}, qw( perltidyrc - examples/indent.pl - examples/subtest.t - examples/tools.pl - examples/tools.t t/00compile.t t/00-report.t t/zzz-check-breaks.t diff --git a/cpan/Test-Simple/lib/Test/Builder.pm b/cpan/Test-Simple/lib/Test/Builder.pm index bc0e095..2a1be72 100644 --- a/cpan/Test-Simple/lib/Test/Builder.pm +++ b/cpan/Test-Simple/lib/Test/Builder.pm @@ -4,7 +4,7 @@ use 5.006; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { if( $] < 5.008 ) { @@ -69,7 +69,7 @@ sub _add_ts_hooks { return Test::Builder::TodoDiag->new(%$e) if ref($e) eq 'Test2::Event::Diag'; # Set todo on ok's - if ($hub == $active_hub && $e->isa('Test2::Event::Ok')) { + if ($e->isa('Test2::Event::Ok')) { $e->set_todo($todo); $e->set_effective_pass(1); diff --git a/cpan/Test-Simple/lib/Test/Builder/Formatter.pm b/cpan/Test-Simple/lib/Test/Builder/Formatter.pm index b89beea..389597f 100644 --- a/cpan/Test-Simple/lib/Test/Builder/Formatter.pm +++ b/cpan/Test-Simple/lib/Test/Builder/Formatter.pm @@ -2,7 +2,7 @@ package Test::Builder::Formatter; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { require Test2::Formatter::TAP; our @ISA = qw(Test2::Formatter::TAP) } diff --git a/cpan/Test-Simple/lib/Test/Builder/Module.pm b/cpan/Test-Simple/lib/Test/Builder/Module.pm index 165b433..a1434f5 100644 --- a/cpan/Test-Simple/lib/Test/Builder/Module.pm +++ b/cpan/Test-Simple/lib/Test/Builder/Module.pm @@ -7,7 +7,7 @@ use Test::Builder; require Exporter; our @ISA = qw(Exporter); -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; =head1 NAME diff --git a/cpan/Test-Simple/lib/Test/Builder/Tester.pm b/cpan/Test-Simple/lib/Test/Builder/Tester.pm index 22003f9..de5e5e6 100644 --- a/cpan/Test-Simple/lib/Test/Builder/Tester.pm +++ b/cpan/Test-Simple/lib/Test/Builder/Tester.pm @@ -1,7 +1,7 @@ package Test::Builder::Tester; use strict; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Test::Builder; use Symbol; diff --git a/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm b/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm index 9e723ee..c28e5ad6 100644 --- a/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm +++ b/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm @@ -1,7 +1,7 @@ package Test::Builder::Tester::Color; use strict; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; require Test::Builder::Tester; diff --git a/cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm b/cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm index a5d0f6e..b716af9 100644 --- a/cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm +++ b/cpan/Test-Simple/lib/Test/Builder/TodoDiag.pm @@ -2,7 +2,7 @@ package Test::Builder::TodoDiag; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { require Test2::Event::Diag; our @ISA = qw(Test2::Event::Diag) } diff --git a/cpan/Test-Simple/lib/Test/More.pm b/cpan/Test-Simple/lib/Test/More.pm index 01d9653..66208c4 100644 --- a/cpan/Test-Simple/lib/Test/More.pm +++ b/cpan/Test-Simple/lib/Test/More.pm @@ -17,7 +17,7 @@ sub _carp { return warn @_, " at $file line $line\n"; } -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Test::Builder::Module; our @ISA = qw(Test::Builder::Module); diff --git a/cpan/Test-Simple/lib/Test/Simple.pm b/cpan/Test-Simple/lib/Test/Simple.pm index 75820c2..273eee7 100644 --- a/cpan/Test-Simple/lib/Test/Simple.pm +++ b/cpan/Test-Simple/lib/Test/Simple.pm @@ -4,7 +4,7 @@ use 5.006; use strict; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Test::Builder::Module; our @ISA = qw(Test::Builder::Module); diff --git a/cpan/Test-Simple/lib/Test/Tester.pm b/cpan/Test-Simple/lib/Test/Tester.pm index bb93920..adbaac9 100644 --- a/cpan/Test-Simple/lib/Test/Tester.pm +++ b/cpan/Test-Simple/lib/Test/Tester.pm @@ -18,7 +18,7 @@ require Exporter; use vars qw( @ISA @EXPORT ); -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; @EXPORT = qw( run_tests check_tests check_test cmp_results show_space ); @ISA = qw( Exporter ); diff --git a/cpan/Test-Simple/lib/Test/Tester/Capture.pm b/cpan/Test-Simple/lib/Test/Tester/Capture.pm index 0cfa580..5a440c7 100644 --- a/cpan/Test-Simple/lib/Test/Tester/Capture.pm +++ b/cpan/Test-Simple/lib/Test/Tester/Capture.pm @@ -2,7 +2,7 @@ use strict; package Test::Tester::Capture; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Test::Builder; diff --git a/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm b/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm index 91a48cc..4c282bf 100644 --- a/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm +++ b/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm @@ -3,7 +3,7 @@ use strict; package Test::Tester::CaptureRunner; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Test::Tester::Capture; diff --git a/cpan/Test-Simple/lib/Test/Tester/Delegate.pm b/cpan/Test-Simple/lib/Test/Tester/Delegate.pm index 080509e..d331496 100644 --- a/cpan/Test-Simple/lib/Test/Tester/Delegate.pm +++ b/cpan/Test-Simple/lib/Test/Tester/Delegate.pm @@ -3,7 +3,7 @@ use warnings; package Test::Tester::Delegate; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use vars '$AUTOLOAD'; diff --git a/cpan/Test-Simple/lib/Test/use/ok.pm b/cpan/Test-Simple/lib/Test/use/ok.pm index a5899cb..e1e4b98 100644 --- a/cpan/Test-Simple/lib/Test/use/ok.pm +++ b/cpan/Test-Simple/lib/Test/use/ok.pm @@ -1,7 +1,7 @@ package Test::use::ok; use 5.005; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; __END__ diff --git a/cpan/Test-Simple/lib/Test2.pm b/cpan/Test-Simple/lib/Test2.pm index 0ac6c1c..c67ad19 100644 --- a/cpan/Test-Simple/lib/Test2.pm +++ b/cpan/Test-Simple/lib/Test2.pm @@ -2,7 +2,7 @@ package Test2; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; 1; diff --git a/cpan/Test-Simple/lib/Test2/API.pm b/cpan/Test-Simple/lib/Test2/API.pm index 0dcf4aa..6f91667 100644 --- a/cpan/Test-Simple/lib/Test2/API.pm +++ b/cpan/Test-Simple/lib/Test2/API.pm @@ -2,7 +2,7 @@ package Test2::API; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; my $INST; diff --git a/cpan/Test-Simple/lib/Test2/API/Breakage.pm b/cpan/Test-Simple/lib/Test2/API/Breakage.pm index 93d10c0..580e091 100644 --- a/cpan/Test-Simple/lib/Test2/API/Breakage.pm +++ b/cpan/Test-Simple/lib/Test2/API/Breakage.pm @@ -2,7 +2,7 @@ package Test2::API::Breakage; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Test2::Util qw/pkg_to_file/; diff --git a/cpan/Test-Simple/lib/Test2/API/Context.pm b/cpan/Test-Simple/lib/Test2/API/Context.pm index 98e5247..6e9362f 100644 --- a/cpan/Test-Simple/lib/Test2/API/Context.pm +++ b/cpan/Test-Simple/lib/Test2/API/Context.pm @@ -2,7 +2,7 @@ package Test2::API::Context; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Carp qw/confess croak longmess/; diff --git a/cpan/Test-Simple/lib/Test2/API/Instance.pm b/cpan/Test-Simple/lib/Test2/API/Instance.pm index 515af62..7275e18 100644 --- a/cpan/Test-Simple/lib/Test2/API/Instance.pm +++ b/cpan/Test-Simple/lib/Test2/API/Instance.pm @@ -2,7 +2,7 @@ package Test2::API::Instance; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; our @CARP_NOT = qw/Test2::API Test2::API::Instance Test2::IPC::Driver Test2::Formatter/; diff --git a/cpan/Test-Simple/lib/Test2/API/Stack.pm b/cpan/Test-Simple/lib/Test2/API/Stack.pm index 894de47..ec19553 100644 --- a/cpan/Test-Simple/lib/Test2/API/Stack.pm +++ b/cpan/Test-Simple/lib/Test2/API/Stack.pm @@ -2,7 +2,7 @@ package Test2::API::Stack; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Test2::Hub(); diff --git a/cpan/Test-Simple/lib/Test2/Event.pm b/cpan/Test-Simple/lib/Test2/Event.pm index 6e1c925..83365b5 100644 --- a/cpan/Test-Simple/lib/Test2/Event.pm +++ b/cpan/Test-Simple/lib/Test2/Event.pm @@ -2,7 +2,7 @@ package Test2::Event; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Test2::Util::HashBase qw/trace nested in_subtest subtest_id/; diff --git a/cpan/Test-Simple/lib/Test2/Event/Bail.pm b/cpan/Test-Simple/lib/Test2/Event/Bail.pm index e95890e..44688b3 100644 --- a/cpan/Test-Simple/lib/Test2/Event/Bail.pm +++ b/cpan/Test-Simple/lib/Test2/Event/Bail.pm @@ -2,7 +2,7 @@ package Test2::Event::Bail; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) } diff --git a/cpan/Test-Simple/lib/Test2/Event/Diag.pm b/cpan/Test-Simple/lib/Test2/Event/Diag.pm index 66b1ac5..afb4d6f 100644 --- a/cpan/Test-Simple/lib/Test2/Event/Diag.pm +++ b/cpan/Test-Simple/lib/Test2/Event/Diag.pm @@ -2,7 +2,7 @@ package Test2::Event::Diag; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) } diff --git a/cpan/Test-Simple/lib/Test2/Event/Exception.pm b/cpan/Test-Simple/lib/Test2/Event/Exception.pm index d08bde3..5e914fc 100644 --- a/cpan/Test-Simple/lib/Test2/Event/Exception.pm +++ b/cpan/Test-Simple/lib/Test2/Event/Exception.pm @@ -2,7 +2,7 @@ package Test2::Event::Exception; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) } diff --git a/cpan/Test-Simple/lib/Test2/Event/Generic.pm b/cpan/Test-Simple/lib/Test2/Event/Generic.pm index 69007a2..4a7d332 100644 --- a/cpan/Test-Simple/lib/Test2/Event/Generic.pm +++ b/cpan/Test-Simple/lib/Test2/Event/Generic.pm @@ -5,7 +5,7 @@ use warnings; use Carp qw/croak/; use Scalar::Util qw/reftype/; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) } use Test2::Util::HashBase; diff --git a/cpan/Test-Simple/lib/Test2/Event/Info.pm b/cpan/Test-Simple/lib/Test2/Event/Info.pm index 656e272..029ab54 100644 --- a/cpan/Test-Simple/lib/Test2/Event/Info.pm +++ b/cpan/Test-Simple/lib/Test2/Event/Info.pm @@ -4,7 +4,7 @@ use warnings; use Scalar::Util qw/blessed/; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) } use Test2::Util::HashBase qw/diagnostics renderer/; diff --git a/cpan/Test-Simple/lib/Test2/Event/Note.pm b/cpan/Test-Simple/lib/Test2/Event/Note.pm index 1425ce4..c277296 100644 --- a/cpan/Test-Simple/lib/Test2/Event/Note.pm +++ b/cpan/Test-Simple/lib/Test2/Event/Note.pm @@ -2,7 +2,7 @@ package Test2::Event::Note; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) } diff --git a/cpan/Test-Simple/lib/Test2/Event/Ok.pm b/cpan/Test-Simple/lib/Test2/Event/Ok.pm index 2b8c31e..341dc06 100644 --- a/cpan/Test-Simple/lib/Test2/Event/Ok.pm +++ b/cpan/Test-Simple/lib/Test2/Event/Ok.pm @@ -2,7 +2,7 @@ package Test2::Event::Ok; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) } diff --git a/cpan/Test-Simple/lib/Test2/Event/Plan.pm b/cpan/Test-Simple/lib/Test2/Event/Plan.pm index a7d51b3..904f6e9 100644 --- a/cpan/Test-Simple/lib/Test2/Event/Plan.pm +++ b/cpan/Test-Simple/lib/Test2/Event/Plan.pm @@ -2,7 +2,7 @@ package Test2::Event::Plan; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) } diff --git a/cpan/Test-Simple/lib/Test2/Event/Skip.pm b/cpan/Test-Simple/lib/Test2/Event/Skip.pm index 71a0a22..9b7aa64 100644 --- a/cpan/Test-Simple/lib/Test2/Event/Skip.pm +++ b/cpan/Test-Simple/lib/Test2/Event/Skip.pm @@ -2,7 +2,7 @@ package Test2::Event::Skip; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { require Test2::Event::Ok; our @ISA = qw(Test2::Event::Ok) } diff --git a/cpan/Test-Simple/lib/Test2/Event/Subtest.pm b/cpan/Test-Simple/lib/Test2/Event/Subtest.pm index 45efddb..45ba0f5 100644 --- a/cpan/Test-Simple/lib/Test2/Event/Subtest.pm +++ b/cpan/Test-Simple/lib/Test2/Event/Subtest.pm @@ -2,7 +2,7 @@ package Test2::Event::Subtest; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { require Test2::Event::Ok; our @ISA = qw(Test2::Event::Ok) } diff --git a/cpan/Test-Simple/lib/Test2/Event/Waiting.pm b/cpan/Test-Simple/lib/Test2/Event/Waiting.pm index fb41f14..15db583 100644 --- a/cpan/Test-Simple/lib/Test2/Event/Waiting.pm +++ b/cpan/Test-Simple/lib/Test2/Event/Waiting.pm @@ -2,7 +2,7 @@ package Test2::Event::Waiting; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) } diff --git a/cpan/Test-Simple/lib/Test2/Formatter.pm b/cpan/Test-Simple/lib/Test2/Formatter.pm index e258651..77d023d 100644 --- a/cpan/Test-Simple/lib/Test2/Formatter.pm +++ b/cpan/Test-Simple/lib/Test2/Formatter.pm @@ -2,7 +2,7 @@ package Test2::Formatter; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; my %ADDED; diff --git a/cpan/Test-Simple/lib/Test2/Formatter/TAP.pm b/cpan/Test-Simple/lib/Test2/Formatter/TAP.pm index 9243069..09211f0 100644 --- a/cpan/Test-Simple/lib/Test2/Formatter/TAP.pm +++ b/cpan/Test-Simple/lib/Test2/Formatter/TAP.pm @@ -3,7 +3,7 @@ use strict; use warnings; require PerlIO; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Test2::Util::HashBase qw{ diff --git a/cpan/Test-Simple/lib/Test2/Hub.pm b/cpan/Test-Simple/lib/Test2/Hub.pm index d1ba531..707c585 100644 --- a/cpan/Test-Simple/lib/Test2/Hub.pm +++ b/cpan/Test-Simple/lib/Test2/Hub.pm @@ -2,7 +2,7 @@ package Test2::Hub; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Carp qw/carp croak confess/; diff --git a/cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm b/cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm index d9dec73..f81284d 100644 --- a/cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm +++ b/cpan/Test-Simple/lib/Test2/Hub/Interceptor.pm @@ -2,7 +2,7 @@ package Test2::Hub::Interceptor; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Test2::Hub::Interceptor::Terminator(); diff --git a/cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm b/cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm index 1fa8913..1666274 100644 --- a/cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm +++ b/cpan/Test-Simple/lib/Test2/Hub/Interceptor/Terminator.pm @@ -2,7 +2,7 @@ package Test2::Hub::Interceptor::Terminator; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; 1; diff --git a/cpan/Test-Simple/lib/Test2/Hub/Subtest.pm b/cpan/Test-Simple/lib/Test2/Hub/Subtest.pm index 96338c2..835090a 100644 --- a/cpan/Test-Simple/lib/Test2/Hub/Subtest.pm +++ b/cpan/Test-Simple/lib/Test2/Hub/Subtest.pm @@ -2,7 +2,7 @@ package Test2::Hub::Subtest; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { require Test2::Hub; our @ISA = qw(Test2::Hub) } diff --git a/cpan/Test-Simple/lib/Test2/IPC.pm b/cpan/Test-Simple/lib/Test2/IPC.pm index 4fa952d..c09293a 100644 --- a/cpan/Test-Simple/lib/Test2/IPC.pm +++ b/cpan/Test-Simple/lib/Test2/IPC.pm @@ -2,7 +2,7 @@ package Test2::IPC; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Test2::API::Instance; diff --git a/cpan/Test-Simple/lib/Test2/IPC/Driver.pm b/cpan/Test-Simple/lib/Test2/IPC/Driver.pm index 2e06eab..521e4ce 100644 --- a/cpan/Test-Simple/lib/Test2/IPC/Driver.pm +++ b/cpan/Test-Simple/lib/Test2/IPC/Driver.pm @@ -2,7 +2,7 @@ package Test2::IPC::Driver; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Carp qw/confess longmess/; diff --git a/cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm b/cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm index 5c9740d..7cf62c8 100644 --- a/cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm +++ b/cpan/Test-Simple/lib/Test2/IPC/Driver/Files.pm @@ -2,7 +2,7 @@ package Test2::IPC::Driver::Files; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; BEGIN { require Test2::IPC::Driver; our @ISA = qw(Test2::IPC::Driver) } @@ -18,6 +18,51 @@ use POSIX(); use Test2::Util qw/try get_tid pkg_to_file IS_WIN32/; use Test2::API qw/test2_ipc_set_pending/; +BEGIN { + if (IS_WIN32) { + my $max_tries = 5; + + *do_rename = sub { + my ($from, $to) = @_; + + my $err; + for (1 .. $max_tries) { + return (1) if rename($from, $to); + $err = "$!"; + last if $_ == $max_tries; + sleep 1; + } + + return (0, $err); + }; + *do_unlink = sub { + my ($file) = @_; + + my $err; + for (1 .. $max_tries) { + return (1) if unlink($file); + $err = "$!"; + last if $_ == $max_tries; + sleep 1; + } + + return (0, "$!"); + }; + } + else { + *do_rename = sub { + my ($from, $to) = @_; + return (1) if rename($from, $to); + return (0, "$!"); + }; + *do_unlink = sub { + my ($file) = @_; + return (1) if unlink($file); + return (0, "$!"); + }; + } +} + sub use_shm { 1 } sub shm_size() { 64 } @@ -107,10 +152,12 @@ sub drop_hub { unless get_tid() == $tid; if ($ENV{T2_KEEP_TEMPDIR}) { - rename($hfile, File::Spec->canonpath("$hfile.complete")) or $self->abort_trace("Could not rename file '$hfile' -> '$hfile.complete'"); + my ($ok, $err) = do_rename($hfile, File::Spec->canonpath("$hfile.complete")); + $self->abort_trace("Could not rename file '$hfile' -> '$hfile.complete': $err") unless $ok } else { - unlink($hfile) or $self->abort_trace("Could not remove file for hub '$hid'"); + my ($ok, $err) = do_unlink($hfile); + $self->abort_trace("Could not remove file for hub '$hid': $err") unless $ok } opendir(my $dh, $tdir) or $self->abort_trace("Could not open temp dir!"); @@ -170,7 +217,11 @@ do so if Test::Builder is loaded for legacy reasons. # Write and rename the file. my ($ok, $err) = try { Storable::store($e, $file); - rename($file, $ready) or $self->abort("Could not rename file '$file' -> '$ready'"); + my ($ok, $err) = do_rename("$file", $ready); + unless ($ok) { + POSIX::sigprocmask(POSIX::SIG_SETMASK(), $old, POSIX::SigSet->new()) if defined $blocked; + $self->abort("Could not rename file '$file' -> '$ready': $err"); + }; test2_ipc_set_pending(substr($file, -(shm_size))); }; @@ -214,35 +265,22 @@ sub cull { opendir(my $dh, $tempdir) or $self->abort("could not open IPC temp dir ($tempdir)!"); my @out; - for my $file (sort readdir($dh)) { - next if substr($file, 0, 1) eq '.'; - - next unless substr($file, -6, 6) eq '.ready'; - - my $global = substr($file, 0, 6) eq 'GLOBAL'; - my $hid_len = length($hid); - my $have_hid = !$global && substr($file, 0, $hid_len) eq $hid && substr($file, $hid_len, 1) eq '-'; - - next unless $have_hid || $global; - - next if $global && $self->{+GLOBALS}->{$hid}->{$file}++; - - # Untaint the path. - my $full = File::Spec->catfile($tempdir, $file); - ($full) = ($full =~ m/^(.*)$/gs); - + for my $info (sort cmp_events map { $self->should_read_event($hid, $_) } readdir($dh)) { + my $full = $info->{full_path}; my $obj = $self->read_event_file($full); push @out => $obj; # Do not remove global events - next if $global; + next if $info->{global}; - my $complete = File::Spec->canonpath("$full.complete"); if ($ENV{T2_KEEP_TEMPDIR}) { - rename($full, $complete) or $self->abort("Could not rename IPC file '$full', '$complete'"); + my $complete = File::Spec->canonpath("$full.complete"); + my ($ok, $err) = do_rename($full, $complete); + $self->abort("Could not rename IPC file '$full', '$complete': $err") unless $ok; } else { - unlink($full) or $self->abort("Could not unlink IPC file: $file"); + my ($ok, $err) = do_unlink("$full"); + $self->abort("Could not unlink IPC file '$full': $err") unless $ok; } } @@ -250,6 +288,64 @@ sub cull { return @out; } +sub parse_event_filename { + my $self = shift; + my ($file) = @_; + + # The || is to force 0 in false + my $complete = substr($file, -9, 9) eq '.complete' || 0 and substr($file, -9, 9, ""); + my $ready = substr($file, -6, 6) eq '.ready' || 0 and substr($file, -6, 6, ""); + + my @parts = split '-', $file; + my ($global, $hid) = $parts[0] eq 'GLOBAL' ? (1, shift @parts) : (0, join '-' => splice(@parts, 0, 3)); + my ($pid, $tid, $eid) = splice(@parts, 0, 3); + my $type = join '::' => @parts; + + return { + ready => $ready, + complete => $complete, + global => $global, + type => $type, + hid => $hid, + pid => $pid, + tid => $tid, + eid => $eid, + }; +} + +sub should_read_event { + my $self = shift; + my ($hid, $file) = @_; + + return if substr($file, 0, 1) eq '.'; + + my $parsed = $self->parse_event_filename($file); + + return if $parsed->{complete}; + return unless $parsed->{ready}; + return unless $parsed->{global} || $parsed->{hid} eq $hid; + + return if $parsed->{global} && $self->{+GLOBALS}->{$hid}->{$file}++; + + # Untaint the path. + my $full = File::Spec->catfile($self->{+TEMPDIR}, $file); + ($full) = ($full =~ m/^(.*)$/gs) if ${^TAINT}; + + $parsed->{full_path} = $full; + + return $parsed; +} + +sub cmp_events { + # Globals first + return -1 if $a->{global} && !$b->{global}; + return 1 if $b->{global} && !$a->{global}; + + return $a->{pid} <=> $b->{pid} + || $a->{tid} <=> $b->{tid} + || $a->{eid} <=> $b->{eid}; +} + sub read_event_file { my $self = shift; my ($file) = @_; @@ -306,7 +402,8 @@ sub DESTROY { $full =~ m/^(.*)$/; $full = $1; # Untaint it next if $ENV{T2_KEEP_TEMPDIR}; - unlink($full) or $self->abort("Could not unlink IPC file: $full"); + my ($ok, $err) = do_unlink($full); + $self->abort("Could not unlink IPC file '$full': $err") unless $ok; next; } diff --git a/cpan/Test-Simple/lib/Test2/Util.pm b/cpan/Test-Simple/lib/Test2/Util.pm index 299a0be..c44a752 100644 --- a/cpan/Test-Simple/lib/Test2/Util.pm +++ b/cpan/Test-Simple/lib/Test2/Util.pm @@ -2,7 +2,7 @@ package Test2::Util; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Config qw/%Config/; diff --git a/cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm b/cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm index 37ce841..e7555e3 100644 --- a/cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm +++ b/cpan/Test-Simple/lib/Test2/Util/ExternalMeta.pm @@ -2,7 +2,7 @@ package Test2::Util::ExternalMeta; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Carp qw/croak/; diff --git a/cpan/Test-Simple/lib/Test2/Util/HashBase.pm b/cpan/Test-Simple/lib/Test2/Util/HashBase.pm index a61b7fb..1121385 100644 --- a/cpan/Test-Simple/lib/Test2/Util/HashBase.pm +++ b/cpan/Test-Simple/lib/Test2/Util/HashBase.pm @@ -2,7 +2,7 @@ package Test2::Util::HashBase; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; require Carp; diff --git a/cpan/Test-Simple/lib/Test2/Util/Trace.pm b/cpan/Test-Simple/lib/Test2/Util/Trace.pm index 67286f9..0dc99fe 100644 --- a/cpan/Test-Simple/lib/Test2/Util/Trace.pm +++ b/cpan/Test-Simple/lib/Test2/Util/Trace.pm @@ -2,7 +2,7 @@ package Test2::Util::Trace; use strict; use warnings; -our $VERSION = '1.302040'; +our $VERSION = '1.302045'; use Test2::Util qw/get_tid/; diff --git a/cpan/Test-Simple/lib/ok.pm b/cpan/Test-Simple/lib/ok.pm index c8cf308..5f3dd1c 100644 --- a/cpan/Test-Simple/lib/ok.pm +++ b/cpan/Test-Simple/lib/ok.pm @@ -1,5 +1,5 @@ package ok; -$ok::VERSION = '1.302040'; +$ok::VERSION = '1.302045'; use strict; use Test::More (); diff --git a/cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t b/cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t index 5cda691..1691751 100644 --- a/cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t +++ b/cpan/Test-Simple/t/Test2/modules/IPC/Driver/Files.t @@ -2,6 +2,7 @@ BEGIN { require "t/tools.pl" }; use Test2::Util qw/get_tid USE_THREADS try/; use File::Temp qw/tempfile/; use File::Spec qw/catfile/; +use List::Util qw/shuffle/; use strict; use warnings; @@ -40,7 +41,7 @@ ok(-d $ipc->tempdir, "created temp dir"); is($ipc->pid, $$, "stored pid"); is($ipc->tid, get_tid(), "stored the tid"); -my $hid = '12345'; +my $hid = '12345-1-1'; $ipc->add_hub($hid); my $hubfile = File::Spec->catfile($ipc->tempdir, "HUB-$hid"); @@ -171,8 +172,8 @@ ok(!-d $tmpdir, "cleaned up temp dir"); like($out->{STDERR}, qr/IPC Temp Dir: \Q$tmpdir\E/m, "Got temp dir path"); like($out->{STDERR}, qr/^# Not removing temp dir: \Q$tmpdir\E$/m, "Notice about not closing tempdir"); - like($out->{STDERR}, qr/^IPC Fatal Error: File for hub '12345' already exists/m, "Got message for duplicate hub"); - like($out->{STDERR}, qr/^IPC Fatal Error: File for hub '12345' does not exist/m, "Cannot remove hub twice"); + like($out->{STDERR}, qr/^IPC Fatal Error: File for hub '12345-1-1' already exists/m, "Got message for duplicate hub"); + like($out->{STDERR}, qr/^IPC Fatal Error: File for hub '12345-1-1' does not exist/m, "Cannot remove hub twice"); $out = capture { my $ipc = Test2::IPC::Driver::Files->new(); @@ -185,7 +186,7 @@ ok(!-d $tmpdir, "cleaned up temp dir"); like($out->{STDERR}, qr/IPC Fatal Error:/, "Got fatal error"); like($out->{STDERR}, qr/There was an error writing an event/, "Explanation"); - like($out->{STDERR}, qr/Destination: 12345/, "Got dest"); + like($out->{STDERR}, qr/Destination: 12345-1-1/, "Got dest"); like($out->{STDERR}, qr/Origin PID:\s+$$/, "Got pid"); like($out->{STDERR}, qr/Error: Can't store GLOB items/, "Got cause"); @@ -196,7 +197,7 @@ ok(!-d $tmpdir, "cleaned up temp dir"); print STDERR $@ unless $@ =~ m/^255/; $ipc = undef; }; - like($out->{STDERR}, qr/IPC Fatal Error: hub '12345' is not available, failed to send event!/, "Cannot send to missing hub"); + like($out->{STDERR}, qr/IPC Fatal Error: hub '12345-1-1' is not available, failed to send event!/, "Cannot send to missing hub"); $out = capture { my $ipc = Test2::IPC::Driver::Files->new(); @@ -208,7 +209,7 @@ ok(!-d $tmpdir, "cleaned up temp dir"); print STDERR $@ unless $@ =~ m/^255/; }; $cleanup->(); - like($out->{STDERR}, qr/IPC Fatal Error: Not all files from hub '12345' have been collected/, "Leftover files"); + like($out->{STDERR}, qr/IPC Fatal Error: Not all files from hub '12345-1-1' have been collected/, "Leftover files"); like($out->{STDERR}, qr/IPC Fatal Error: Leftover files in the directory \(.*\.ready\)/, "What file"); $out = capture { @@ -294,5 +295,232 @@ ok(!-d $tmpdir, "cleaned up temp dir"); $ipc = undef; } -done_testing; +{ + my @list = shuffle ( + {global => 0, pid => 2, tid => 1, eid => 1}, + {global => 0, pid => 2, tid => 1, eid => 2}, + {global => 0, pid => 2, tid => 1, eid => 3}, + + {global => 1, pid => 1, tid => 1, eid => 1}, + {global => 1, pid => 12, tid => 1, eid => 3}, + {global => 1, pid => 11, tid => 1, eid => 2}, + + {global => 0, pid => 2, tid => 3, eid => 1}, + {global => 0, pid => 2, tid => 3, eid => 10}, + {global => 0, pid => 2, tid => 3, eid => 100}, + + {global => 0, pid => 5, tid => 3, eid => 2}, + {global => 0, pid => 5, tid => 3, eid => 20}, + {global => 0, pid => 5, tid => 3, eid => 200}, + ); + + my @sorted; + { + package Test2::IPC::Driver::Files; + @sorted = sort cmp_events @list; + } + + is_deeply( + \@sorted, + [ + {global => 1, pid => 1, tid => 1, eid => 1}, + {global => 1, pid => 11, tid => 1, eid => 2}, + {global => 1, pid => 12, tid => 1, eid => 3}, + + {global => 0, pid => 2, tid => 1, eid => 1}, + {global => 0, pid => 2, tid => 1, eid => 2}, + {global => 0, pid => 2, tid => 1, eid => 3}, + + {global => 0, pid => 2, tid => 3, eid => 1}, + {global => 0, pid => 2, tid => 3, eid => 10}, + {global => 0, pid => 2, tid => 3, eid => 100}, + + {global => 0, pid => 5, tid => 3, eid => 2}, + {global => 0, pid => 5, tid => 3, eid => 20}, + {global => 0, pid => 5, tid => 3, eid => 200}, + ], + "Sort by global, pid, tid and then eid" + ); +} + +{ + my $ipc = 'Test2::IPC::Driver::Files'; + + is_deeply( + $ipc->parse_event_filename('GLOBAL-123-456-789-Event-Type-Foo.ready.complete'), + { + ready => 1, + complete => 1, + global => 1, + type => "Event::Type::Foo", + hid => "GLOBAL", + pid => "123", + tid => "456", + eid => "789", + }, + "Parsed global complete" + ); + + is_deeply( + $ipc->parse_event_filename('GLOBAL-123-456-789-Event-Type-Foo.ready'), + { + ready => 1, + complete => 0, + global => 1, + type => "Event::Type::Foo", + hid => "GLOBAL", + pid => "123", + tid => "456", + eid => "789", + }, + "Parsed global ready" + ); + + is_deeply( + $ipc->parse_event_filename('GLOBAL-123-456-789-Event-Type-Foo'), + { + ready => 0, + complete => 0, + global => 1, + type => "Event::Type::Foo", + hid => "GLOBAL", + pid => "123", + tid => "456", + eid => "789", + }, + "Parsed global not ready" + ); + + is_deeply( + $ipc->parse_event_filename('1-1-1-123-456-789-Event-Type-Foo.ready.complete'), + { + ready => 1, + complete => 1, + global => 0, + type => "Event::Type::Foo", + hid => "1-1-1", + pid => "123", + tid => "456", + eid => "789", + }, + "Parsed event complete" + ); + + is_deeply( + $ipc->parse_event_filename('1-2-3-123-456-789-Event-Type-Foo.ready'), + { + ready => 1, + complete => 0, + global => 0, + type => "Event::Type::Foo", + hid => "1-2-3", + pid => "123", + tid => "456", + eid => "789", + }, + "Parsed event ready" + ); + + is_deeply( + $ipc->parse_event_filename('3-2-11-123-456-789-Event'), + { + ready => 0, + complete => 0, + global => 0, + type => "Event", + hid => "3-2-11", + pid => "123", + tid => "456", + eid => "789", + }, + "Parsed event not ready" + ); +} + +{ + my $ipc = Test2::IPC::Driver::Files->new(); + + my $hid = "1-1-1"; + + is_deeply( + $ipc->should_read_event($hid, "GLOBAL-123-456-789-Event-Type-Foo.ready.complete") ? 1 : 0, + 0, + "Do not read complete global" + ); + is_deeply( + $ipc->should_read_event($hid, "GLOBAL-123-456-789-Event-Type-Foo.ready") ? 1 : 0, + 1, + "Should read ready global the first time" + ); + is_deeply( + $ipc->should_read_event($hid, "GLOBAL-123-456-789-Event-Type-Foo.ready") ? 1 : 0, + 0, + "Should not read ready global again" + ); + + is_deeply( + $ipc->should_read_event($hid, "GLOBAL-123-456-789-Event-Type-Foo") ? 1 : 0, + 0, + "Should not read un-ready global" + ); + + is_deeply( + $ipc->should_read_event($hid, "$hid-123-456-789-Event-Type-Foo.ready.complete") ? 1 : 0, + 0, + "Do not read complete our hid" + ); + + is_deeply( + $ipc->should_read_event($hid, "$hid-123-456-789-Event-Type-Foo.ready") ? 1 : 0, + 1, + "Should read ready our hid" + ); + + is_deeply( + $ipc->should_read_event($hid, "$hid-123-456-789-Event-Type-Foo.ready") ? 1 : 0, + 1, + "Should read ready our hid (again, no duplicate checking)" + ); + + is_deeply( + $ipc->should_read_event($hid, "$hid-123-456-789-Event-Type-Foo") ? 1 : 0, + 0, + "Should not read un-ready our hid" + ); + + is_deeply( + $ipc->should_read_event($hid, "1-2-3-123-456-789-Event-Type-Foo.ready.complete") ? 1 : 0, + 0, + "Not ours - complete" + ); + + is_deeply( + $ipc->should_read_event($hid, "1-2-3-123-456-789-Event-Type-Foo.ready") ? 1 : 0, + 0, + "Not ours - ready" + ); + + is_deeply( + $ipc->should_read_event($hid, "1-2-3-123-456-789-Event-Type-Foo") ? 1 : 0, + 0, + "Not ours - unready" + ); + + my @got = $ipc->should_read_event($hid, "$hid-123-456-789-Event-Type-Foo"); + ok(!@got, "return empty list for false"); + + @got = $ipc->should_read_event($hid, "$hid-123-456-789-Event-Type-Foo.ready"); + is(@got, 1, "got 1 item on true"); + + like(delete $got[0]->{full_path}, qr{^.+\Q$hid\E-123-456-789-Event-Type-Foo\.ready$}, "Got full path"); + is_deeply( + $got[0], + $ipc->parse_event_filename("$hid-123-456-789-Event-Type-Foo.ready"), + "Apart from full_path we get entire parsed filename" + ); + + $ipc = undef; +} + +done_testing; diff --git a/cpan/Test-Simple/t/Test2/regression/693_ipc_ordering.t b/cpan/Test-Simple/t/Test2/regression/693_ipc_ordering.t new file mode 100644 index 0000000..c365b8a --- /dev/null +++ b/cpan/Test-Simple/t/Test2/regression/693_ipc_ordering.t @@ -0,0 +1,30 @@ +BEGIN { require "t/tools.pl" }; +use strict; +use warnings; + +skip_all("Test cannot run on perls below 5.8.8") unless "$]" > 5.008007; + +use Test2::Util qw/CAN_THREAD/; +use Test2::IPC; +use Test2::API qw/context intercept/; + +skip_all('System does not have threads') unless CAN_THREAD(); + +require threads; +threads->import; + +my $events = intercept { + threads->create( + sub { + ok 1, "something $_ nonlocal" for (1 .. 15); + } + )->join; +}; + +is_deeply( + [map { $_->{name} } @$events], + [map "something $_ nonlocal", 1 .. 15], + "Culled sub-thread events in correct order" +); + +done_testing; diff --git a/cpan/libnet/Makefile.PL b/cpan/libnet/Makefile.PL index 64d6959..6efc003 100644 --- a/cpan/libnet/Makefile.PL +++ b/cpan/libnet/Makefile.PL @@ -66,7 +66,7 @@ MAIN: { ABSTRACT => 'Collection of network protocol modules', AUTHOR => 'Graham Barr <[email protected]>, Steve Hay <[email protected]>', LICENSE => 'perl_5', - VERSION => '3.08', + VERSION => '3.09', META_MERGE => { 'meta-spec' => { @@ -120,7 +120,7 @@ MAIN: { prereqs => { runtime => { requires => { - 'IO::Socket::IP' => '0.20' + 'IO::Socket::IP' => '0.25' # or IO::Socket::INET6 2.62 } } diff --git a/cpan/libnet/lib/Net/Cmd.pm b/cpan/libnet/lib/Net/Cmd.pm index 2242600..3f102b9 100644 --- a/cpan/libnet/lib/Net/Cmd.pm +++ b/cpan/libnet/lib/Net/Cmd.pm @@ -28,7 +28,7 @@ BEGIN { } } -our $VERSION = "3.08"; +our $VERSION = "3.09"; our @ISA = qw(Exporter); our @EXPORT = qw(CMD_INFO CMD_OK CMD_MORE CMD_REJECT CMD_ERROR CMD_PENDING); @@ -190,6 +190,8 @@ sub set_status { 1; } +sub timeout { 0 } + sub _syswrite_with_timeout { my $cmd = shift; my $line = shift; @@ -748,6 +750,12 @@ command server. Returns undef upon failure. +=item timeout () + +Returns the timeout value for this class, in seconds. The timeout provided +by the default implementation is 0; subclasses may override this if they +choose. + =item unsupported () Sets the status code to 580 and the response text to 'Unsupported command'. diff --git a/cpan/libnet/lib/Net/Config.pm b/cpan/libnet/lib/Net/Config.pm index 3aa547e..ff2b841 100644 --- a/cpan/libnet/lib/Net/Config.pm +++ b/cpan/libnet/lib/Net/Config.pm @@ -20,7 +20,7 @@ use Socket qw(inet_aton inet_ntoa); our @EXPORT = qw(%NetConfig); our @ISA = qw(Net::LocalCfg Exporter); -our $VERSION = "3.08"; +our $VERSION = "3.09"; our($CONFIGURE, $LIBNET_CFG); diff --git a/cpan/libnet/lib/Net/Domain.pm b/cpan/libnet/lib/Net/Domain.pm index e2be3b1..6b650b8 100644 --- a/cpan/libnet/lib/Net/Domain.pm +++ b/cpan/libnet/lib/Net/Domain.pm @@ -21,7 +21,7 @@ use Net::Config; our @ISA = qw(Exporter); our @EXPORT_OK = qw(hostname hostdomain hostfqdn domainname); -our $VERSION = "3.08"; +our $VERSION = "3.09"; my ($host, $domain, $fqdn) = (undef, undef, undef); diff --git a/cpan/libnet/lib/Net/FTP.pm b/cpan/libnet/lib/Net/FTP.pm index c0904c6..2bf6fc9 100644 --- a/cpan/libnet/lib/Net/FTP.pm +++ b/cpan/libnet/lib/Net/FTP.pm @@ -25,7 +25,7 @@ use Net::Config; use Socket; use Time::Local; -our $VERSION = '3.08'; +our $VERSION = '3.09'; our $IOCLASS; my $family_key; @@ -45,7 +45,7 @@ BEGIN { my $inet6_class = eval { require IO::Socket::IP; no warnings 'numeric'; - IO::Socket::IP->VERSION(0.20); + IO::Socket::IP->VERSION(0.25); } && 'IO::Socket::IP' || eval { require IO::Socket::INET6; no warnings 'numeric'; diff --git a/cpan/libnet/lib/Net/FTP/A.pm b/cpan/libnet/lib/Net/FTP/A.pm index a1ae30b..5dc16fa 100644 --- a/cpan/libnet/lib/Net/FTP/A.pm +++ b/cpan/libnet/lib/Net/FTP/A.pm @@ -13,7 +13,7 @@ use Carp; use Net::FTP::dataconn; our @ISA = qw(Net::FTP::dataconn); -our $VERSION = "3.08"; +our $VERSION = "3.09"; our $buf; diff --git a/cpan/libnet/lib/Net/FTP/E.pm b/cpan/libnet/lib/Net/FTP/E.pm index cf09d90..5f77665 100644 --- a/cpan/libnet/lib/Net/FTP/E.pm +++ b/cpan/libnet/lib/Net/FTP/E.pm @@ -8,6 +8,6 @@ use warnings; use Net::FTP::I; our @ISA = qw(Net::FTP::I); -our $VERSION = "3.08"; +our $VERSION = "3.09"; 1; diff --git a/cpan/libnet/lib/Net/FTP/I.pm b/cpan/libnet/lib/Net/FTP/I.pm index b014f08..25d14c0 100644 --- a/cpan/libnet/lib/Net/FTP/I.pm +++ b/cpan/libnet/lib/Net/FTP/I.pm @@ -13,7 +13,7 @@ use Carp; use Net::FTP::dataconn; our @ISA = qw(Net::FTP::dataconn); -our $VERSION = "3.08"; +our $VERSION = "3.09"; our $buf; diff --git a/cpan/libnet/lib/Net/FTP/L.pm b/cpan/libnet/lib/Net/FTP/L.pm index d13efe7..1809194 100644 --- a/cpan/libnet/lib/Net/FTP/L.pm +++ b/cpan/libnet/lib/Net/FTP/L.pm @@ -8,6 +8,6 @@ use warnings; use Net::FTP::I; our @ISA = qw(Net::FTP::I); -our $VERSION = "3.08"; +our $VERSION = "3.09"; 1; diff --git a/cpan/libnet/lib/Net/FTP/dataconn.pm b/cpan/libnet/lib/Net/FTP/dataconn.pm index 8d82030..24b2ac7 100644 --- a/cpan/libnet/lib/Net/FTP/dataconn.pm +++ b/cpan/libnet/lib/Net/FTP/dataconn.pm @@ -13,7 +13,7 @@ use Carp; use Errno; use Net::Cmd; -our $VERSION = '3.08'; +our $VERSION = '3.09'; $Net::FTP::IOCLASS or die "please load Net::FTP before Net::FTP::dataconn"; our @ISA = $Net::FTP::IOCLASS; diff --git a/cpan/libnet/lib/Net/NNTP.pm b/cpan/libnet/lib/Net/NNTP.pm index 0d690de..803692b 100644 --- a/cpan/libnet/lib/Net/NNTP.pm +++ b/cpan/libnet/lib/Net/NNTP.pm @@ -21,7 +21,7 @@ use Net::Cmd; use Net::Config; use Time::Local; -our $VERSION = "3.08"; +our $VERSION = "3.09"; # Code for detecting if we can use SSL my $ssl_class = eval { @@ -39,7 +39,7 @@ my $family_key = 'Domain'; my $inet6_class = eval { require IO::Socket::IP; no warnings 'numeric'; - IO::Socket::IP->VERSION(0.20) || die; + IO::Socket::IP->VERSION(0.25) || die; $family_key = 'Family'; } && 'IO::Socket::IP' || eval { require IO::Socket::INET6; @@ -845,10 +845,10 @@ NNTP server, a value of zero will cause all IO operations to block. B<Debug> - Enable the printing of debugging information to STDERR B<Reader> - If the remote server is INN then initially the connection -will be to nnrpd, by default C<Net::NNTP> will issue a C<MODE READER> command -so that the remote server becomes innd. If the C<Reader> option is given +will be to innd, by default C<Net::NNTP> will issue a C<MODE READER> command +so that the remote server becomes nnrpd. If the C<Reader> option is given with a value of zero, then this command will not be sent and the -connection will be left talking to nnrpd. +connection will be left talking to innd. B<LocalAddr> and B<LocalPort> - These parameters are passed directly to IO::Socket to allow binding the socket to a specific local address and port. diff --git a/cpan/libnet/lib/Net/Netrc.pm b/cpan/libnet/lib/Net/Netrc.pm index 4945604..5988606 100644 --- a/cpan/libnet/lib/Net/Netrc.pm +++ b/cpan/libnet/lib/Net/Netrc.pm @@ -18,7 +18,7 @@ use warnings; use Carp; use FileHandle; -our $VERSION = "3.08"; +our $VERSION = "3.09"; our $TESTING; diff --git a/cpan/libnet/lib/Net/POP3.pm b/cpan/libnet/lib/Net/POP3.pm index bccdfb0..eaff511 100644 --- a/cpan/libnet/lib/Net/POP3.pm +++ b/cpan/libnet/lib/Net/POP3.pm @@ -20,7 +20,7 @@ use IO::Socket; use Net::Cmd; use Net::Config; -our $VERSION = "3.08"; +our $VERSION = "3.09"; # Code for detecting if we can use SSL my $ssl_class = eval { @@ -38,7 +38,7 @@ my $family_key = 'Domain'; my $inet6_class = eval { require IO::Socket::IP; no warnings 'numeric'; - IO::Socket::IP->VERSION(0.20) || die; + IO::Socket::IP->VERSION(0.25) || die; $family_key = 'Family'; } && 'IO::Socket::IP' || eval { require IO::Socket::INET6; diff --git a/cpan/libnet/lib/Net/SMTP.pm b/cpan/libnet/lib/Net/SMTP.pm index 6d3e4c2..726035d 100644 --- a/cpan/libnet/lib/Net/SMTP.pm +++ b/cpan/libnet/lib/Net/SMTP.pm @@ -21,7 +21,7 @@ use Net::Cmd; use Net::Config; use Socket; -our $VERSION = "3.08"; +our $VERSION = "3.09"; # Code for detecting if we can use SSL my $ssl_class = eval { @@ -39,7 +39,7 @@ my $family_key = 'Domain'; my $inet6_class = eval { require IO::Socket::IP; no warnings 'numeric'; - IO::Socket::IP->VERSION(0.20) || die; + IO::Socket::IP->VERSION(0.25) || die; $family_key = 'Family'; } && 'IO::Socket::IP' || eval { require IO::Socket::INET6; @@ -225,11 +225,15 @@ sub auth { if defined $str and length $str; while (($code = $self->command(@cmd)->response()) == CMD_MORE) { + my $str2 = MIME::Base64::decode_base64(($self->message)[0]); + $self->debug_print(0, "(decoded) " . $str2 . "\n") if $self->debug; + + $str = $client->client_step($str2); @cmd = ( - MIME::Base64::encode_base64( - $client->client_step(MIME::Base64::decode_base64(($self->message)[0])), '' - ) + MIME::Base64::encode_base64($str, '') ); + + $self->debug_print(1, "(decoded) " . $str . "\n") if $self->debug; } $code == CMD_OK; diff --git a/cpan/libnet/lib/Net/Time.pm b/cpan/libnet/lib/Net/Time.pm index fae93f8..a8f0b43 100644 --- a/cpan/libnet/lib/Net/Time.pm +++ b/cpan/libnet/lib/Net/Time.pm @@ -24,7 +24,7 @@ use Net::Config; our @ISA = qw(Exporter); our @EXPORT_OK = qw(inet_time inet_daytime); -our $VERSION = "3.08"; +our $VERSION = "3.09"; our $TIMEOUT = 120; diff --git a/cpan/libnet/lib/Net/libnetFAQ.pod b/cpan/libnet/lib/Net/libnetFAQ.pod index f8ad797..d844f6e 100644 --- a/cpan/libnet/lib/Net/libnetFAQ.pod +++ b/cpan/libnet/lib/Net/libnetFAQ.pod @@ -56,7 +56,7 @@ Authen::SASL is required for AUTH support. IO::Socket::SSL version 2.007 or higher is required for SSL support. -IO::Socket::IP version 0.20 or IO::Socket::INET6 version 2.62 is +IO::Socket::IP version 0.25 or IO::Socket::INET6 version 2.62 is required for IPv6 support. =head2 What machines support libnet ? diff --git a/cpan/libnet/t/datasend.t b/cpan/libnet/t/datasend.t index 0aea9d4..05903fb 100644 --- a/cpan/libnet/t/datasend.t +++ b/cpan/libnet/t/datasend.t @@ -21,8 +21,6 @@ BEGIN { use Net::Cmd; our @ISA = qw(Net::Cmd IO::File); - sub timeout { 0 } - sub new { my $fh = shift->new_tmpfile; binmode($fh); diff --git a/cpan/libnet/t/nntp_ipv6.t b/cpan/libnet/t/nntp_ipv6.t index 1992618..768489a 100644 --- a/cpan/libnet/t/nntp_ipv6.t +++ b/cpan/libnet/t/nntp_ipv6.t @@ -63,4 +63,5 @@ sub nntp_server { } } note("NNTP dialog done"); + return 0; } diff --git a/cpan/libnet/t/pop3_ipv6.t b/cpan/libnet/t/pop3_ipv6.t index 1c88c1a..db31128 100644 --- a/cpan/libnet/t/pop3_ipv6.t +++ b/cpan/libnet/t/pop3_ipv6.t @@ -63,4 +63,5 @@ sub pop3_server { } note("POP3 dialog done"); + return 0; } diff --git a/cpan/libnet/t/smtp_ipv6.t b/cpan/libnet/t/smtp_ipv6.t index a31b6ff..f430721 100644 --- a/cpan/libnet/t/smtp_ipv6.t +++ b/cpan/libnet/t/smtp_ipv6.t @@ -65,4 +65,5 @@ sub smtp_server { } note("SMTP dialog done"); + return 0; } diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 3d1b0b7..31759c6 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -2,9 +2,6 @@ =head1 NAME -[ this is a template for a new perldelta file. Any text flagged as XXX needs -to be processed before release. ] - perldelta - what is new for perl v5.25.3 =head1 DESCRIPTION @@ -15,157 +12,120 @@ release. If you are upgrading from an earlier release such as 5.25.1, first read L<perl5252delta>, which describes differences between 5.25.1 and 5.25.2. -=head1 Notice - -XXX Any important notices here - =head1 Core Enhancements -XXX New core language features go here. Summarize user-visible core language -enhancements. Particularly prominent performance optimisations could go -here, but most should go in the L</Performance Enhancements> section. - -[ List each enhancement as a =head2 entry ] - =head2 Unicode 9.0 is now supported -A list of changes is at -L<http://www.unicode.org/versions/Unicode9.0.0/>. Modules that are -shipped with core Perl but not maintained by p5p do not necessarily -support Unicode 9.0. L<Unicode::Normalize> does work on 9.0. +A list of changes is at L<http://www.unicode.org/versions/Unicode9.0.0/>. +Modules that are shipped with core Perl but not maintained by p5p do not +necessarily support Unicode 9.0. L<Unicode::Normalize> does work on 9.0. -=head2 Use of C<\p{I<script>}> uses the improved Script_Extensions -property +=head2 Use of C<\p{I<script>}> uses the improved Script_Extensions property -Unicode 6.0 introduced an improved form of the Script (C<sc>) property, -and called it Script_Extensions (C<scx>). As of now, Perl uses this -improved version when a property is specified as just C<\p{I<script>}>. -The meaning of compound forms, like C<\p{sc=I<script>}> are unchanged. -This should make programs be more accurate when determining if a -character is used in a given script, but there is a slight chance of -breakage for programs that very specifically needed the old behavior. -See L<perlunicode/Scripts>. +Unicode 6.0 introduced an improved form of the Script (C<sc>) property, and +called it Script_Extensions (C<scx>). As of now, Perl uses this improved +version when a property is specified as just C<\p{I<script>}>. The meaning of +compound forms, like C<\p{sc=I<script>}> are unchanged. This should make +programs be more accurate when determining if a character is used in a given +script, but there is a slight chance of breakage for programs that very +specifically needed the old behavior. See L<perlunicode/Scripts>. =head2 Declaring a reference to a variable -As an experimental feature, Perl now allows the referencing operator to -come after C<my>, C<state>, C<our>, or C<local>. This syntax must be -enabled with C<use feature 'declared_refs'>. It is experimental, and will -warn by default unless C<no warnings 'experimental::refaliasing'> is in -effect. It is intended mainly for use in assignments to references. For -example: +As an experimental feature, Perl now allows the referencing operator to come +after L<C<my()>|perlfunc/my>, L<C<state()>|perlfunc/state>, +L<C<our()>|perlfunc/our>, or L<C<local()>|perlfunc/local>. This syntax must +be enabled with C<use feature 'declared_refs'>. It is experimental, and will +warn by default unless C<no warnings 'experimental::refaliasing'> is in effect. +It is intended mainly for use in assignments to references. For example: use experimental 'refaliasing', 'declared_refs'; my \$a = \$b; See L<perlref/Assigning to References> for slightly more detail. -=head1 Security - -XXX Any security-related notices go here. In particular, any security -vulnerabilities closed should be noted here rather than in the -L</Selected Bug Fixes> section. - -[ List each security issue as a =head2 entry ] - =head1 Incompatible Changes -XXX For a release on a stable branch, this section aspires to be: - - There are no changes intentionally incompatible with 5.XXX.XXX - If any exist, they are bugs, and we request that you submit a - report. See L</Reporting Bugs> below. - -[ List each incompatible change as a =head2 entry ] - =head2 C<${^ENCODING}> has been removed -Consequently, the L<encoding> pragma's default mode is no longer supported. -If you still need to write your source code in encodings other than UTF-8, -use a source filter such as L<Filter::Encoding> on CPAN or L<encoding>'s -C<Filter> option. +Consequently, the L<encoding> pragma's default mode is no longer supported. If +you still need to write your source code in encodings other than UTF-8, use a +source filter such as L<Filter::Encoding> on CPAN or L<encoding>'s C<Filter> +option. -=head1 Deprecations +=head2 C<scalar(%hash)> return signature changed -XXX Any deprecated features, syntax, modules etc. should be listed here. +The value returned for C<scalar(%hash)> will no longer show information about +the buckets allocated in the hash. It will simply return the count of used +keys. It is thus equivalent to C<0+keys(%hash)>. -=head2 Module removals +A form of backwards compatibility is provided via C<Hash::Util::bucket_ratio()> +which provides the same behavior as C<scalar(%hash)> provided prior to Perl +5.25. -XXX Remove this section if inapplicable. +=head1 Modules and Pragmata -The following modules will be removed from the core distribution in a -future release, and will at that time need to be installed from CPAN. -Distributions on CPAN which require these modules will need to list them as -prerequisites. +=head2 Updated Modules and Pragmata -The core versions of these modules will now issue C<"deprecated">-category -warnings to alert you to this fact. To silence these deprecation warnings, -install the modules in question from CPAN. +=over 4 -Note that these are (with rare exceptions) fine modules that you are encouraged -to continue to use. Their disinclusion from core primarily hinges on their -necessity to bootstrapping a fully functional, CPAN-capable Perl installation, -not usually on concerns over their design. +=item * -=over +L<bignum> has been upgraded from version 0.42 to 0.43. -=item XXX +=item * -XXX Note that deprecated modules should be listed here even if they are listed -as an updated module in the L</Modules and Pragmata> section. +L<Data::Dumper> has been upgraded from version 2.160 to 2.161. -=back +=item * -[ List each other deprecation as a =head2 entry ] +L<Devel::PPPort> has been upgraded from version 3.32 to 3.35. -=head1 Performance Enhancements +=item * -XXX Changes which enhance performance without changing behaviour go here. -There may well be none in a stable release. +L<Encode> has been upgraded from version 2.80 to 2.84. -[ List each enhancement as a =item entry ] +=item * -=over 4 +L<encoding> has been upgraded from version 2.17 to 2.17_01. + +This module's default mode is no longer supported as of Perl 5.25.3. It now +dies when imported, unless the C<Filter> option is being used. =item * -XXX +L<encoding::warnings> has been upgraded from version 0.12 to 0.13. -=back +This module is no longer supported as of Perl 5.25.3. It emits a warning to +that effect and then does nothing. -=head2 C<scalar(%hash)> return signature changed +=item * -The value returned for C<scalar(%hash)> will no longer show information -about the buckets allocated in the hash. It will simply return the count -of used keys. It is thus equivalent to C<0+keys(%hash)>. +L<ExtUtils::ParseXS> has been upgraded from version 3.32 to 3.33. -A form of backwards compatibility is provided via C<Hash::Util::bucket_ratio()> -which provides the same behavior as scalar(%hash) provided prior to -Perl 5.25. +=item * -=head1 Modules and Pragmata +L<ExtUtils::Typemaps> has been upgraded from version 3.32 to 3.33. -XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/> -go here. If Module::CoreList is updated, generate an initial draft of the -following sections using F<Porting/corelist-perldelta.pl>. A paragraph summary -for important changes should then be added by hand. In an ideal world, -dual-life modules would have a F<Changes> file that could be cribbed. +=item * -[ Within each section, list entries as a =item entry ] +L<feature> has been upgraded from version 1.44 to 1.45. -=head2 New Modules and Pragmata +=item * -=over 4 +L<Hash::Util> has been upgraded from version 0.19 to 0.20. =item * -XXX +L<Math::BigInt> has been upgraded from version 1.999715 to 1.999726. -=back +=item * -=head2 Updated Modules and Pragmata +L<Math::BigInt::FastCalc> has been upgraded from version 0.40 to 0.42. -=over 4 +=item * + +L<Math::BigRat> has been upgraded from version 0.260802 to 0.260804. =item * @@ -173,224 +133,193 @@ L<Module::CoreList> has been upgraded from version 5.20160620 to 5.20160720. =item * -L<XSLoader> has been upgraded from version 0.21 to 0.22, fixing a security -hole in which binary files could be loaded from a path outside of @INC. +L<Parse::CPAN::Meta> has been upgraded from version 1.4417 to 1.4422. =item * -L<encoding> has been upgraded from version 2.17 to 2.17_01. - -This module's default mode is no longer supported as of Perl v5.25.3. It -now dies when imported, unless the C<Filter> option is being used. +L<Perl::OSType> has been upgraded from version 1.009 to 1.010. =item * -L<encoding::warnings> has been upgraded from version 0.12 to 0.13. +L<Test::Simple> has been upgraded from version 1.302026 to 1.302045. -This module is no longer supported as of Perl v5.25.3. It emits a -warning to that effect and then does nothing. +=item * -=back +L<Time::HiRes> has been upgraded from version 1.9734 to 1.9739. -=head2 Removed Modules and Pragmata +=item * -=over 4 +L<Unicode::UCD> has been upgraded from version 0.65 to 0.66. =item * -XXX - -=back +L<version> has been upgraded from version 0.9916 to 0.9917. -=head1 Documentation +=item * -XXX Changes to files in F<pod/> go here. Consider grouping entries by -file and be sure to link to the appropriate page, e.g. L<perlfunc>. +L<warnings> has been upgraded from version 1.36 to 1.37. -=head2 New Documentation +=item * -XXX Changes which create B<new> files in F<pod/> go here. +L<XSLoader> has been upgraded from version 0.21 to 0.22, fixing a security hole +in which binary files could be loaded from a path outside of +L<C<@INC>|perlvar/@INC>. -=head3 L<XXX> +=back -XXX Description of the purpose of the new file here +=head1 Documentation =head2 Changes to Existing Documentation -XXX Changes which significantly change existing files in F<pod/> go here. -However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics> -section. - -=head3 L<XXX> +=head3 L<perldata> and L<perltie> =over 4 =item * -XXX Description of the change here +Updated documentation of C<scalar(%hash)>. See L</scalar(%hash) return +signature changed> above. =back -=head1 Diagnostics - -The following additions or changes have been made to diagnostic output, -including warnings and fatal error messages. For the complete list of -diagnostic messages, see L<perldiag>. - -XXX New or changed warnings emitted by the core's C<C> code go here. Also -include any changes in L<perldiag> that reconcile it to the C<C> code. - -=head2 New Diagnostics - -XXX Newly added diagnostic messages go under here, separated into New Errors -and New Warnings - -=head3 New Errors +=head3 L<perlexperiment> and L<perlref> =over 4 =item * -XXX L<message|perldiag/"message"> +Documented new feature: See L</Declaring a reference to a variable> above. =back -=head3 New Warnings +=head3 L<perlfunc> =over 4 =item * -XXX L<message|perldiag/"message"> +Clarified documentation of L<C<seek()>|perlfunc/seek>, +L<C<tell()>|perlfunc/tell> and L<C<sysseek()>|perlfunc/sysseek>. +L<[perl #128607]|https://rt.perl.org/Public/Bug/Display.html?id=128607> -=back +=item * -=head2 Changes to Existing Diagnostics +Removed obsolete documentation of L<C<study()>|perlfunc/study>. + +=back -XXX Changes (i.e. rewording) of diagnostic messages go here +=head3 L<perlunicode> =over 4 =item * -XXX Describe change here +Documented change to C<\p{I<script>}> to now use the improved Script_Extensions +property. See L</Use of \p{script} uses the improved Script_Extensions +property> above. -=back - -=head1 Utility Changes +=item * -XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go here. -Most of these are built within the directory F<utils>. +Updated the text to correspond with changes in Unicode UTS#18, concerning +regular expressions, and Perl compatibility with what it says. -[ List utility changes as a =head2 entry for each utility and =item -entries for each change -Use L<XXX> with program names to get proper documentation linking. ] +=back -=head2 L<XXX> +=head3 L<perlvar> =over 4 =item * -XXX +Removed obsolete documentation of C<${^ENCODING}>. See L</${^ENCODING} has +been removed> above. =back -=head1 Configuration and Compilation +=head1 Diagnostics -XXX Changes to F<Configure>, F<installperl>, F<installman>, and analogous tools -go here. Any other changes to the Perl build process should be listed here. -However, any platform-specific changes should be listed in the -L</Platform Support> section, instead. +The following additions or changes have been made to diagnostic output, +including warnings and fatal error messages. For the complete list of +diagnostic messages, see L<perldiag>. + +=head2 New Diagnostics -[ List changes as a =item entry ]. +=head3 New Errors =over 4 =item * -XXX +L<The experimental declared_refs feature is not enabled|perldiag/"The experimental declared_refs feature is not enabled"> -=back +(F) To declare references to variables, as in C<my \%x>, you must first enable +the feature: -=head1 Testing + no warnings "experimental::declared_refs"; + use feature "declared_refs"; -XXX Any significant changes to the testing of a freshly built perl should be -listed here. Changes which create B<new> files in F<t/> go here as do any -large changes to the testing harness (e.g. when parallel testing was added). -Changes to existing files in F<t/> aren't worth summarizing, although the bugs -that they represent may be covered elsewhere. +=back -[ List each test improvement as a =item entry ] +=head3 New Warnings =over 4 =item * -XXX - -=back +L<Declaring references is experimental|perldiag/"Declaring references is experimental"> -=head1 Platform Support +(S experimental::declared_refs) This warning is emitted if you use a reference +constructor on the right-hand side of C<my()>, C<state()>, C<our()>, or +C<local()>. Simply suppress the warning if you want to use the feature, but +know that in doing so you are taking the risk of using an experimental feature +which may change or be removed in a future Perl version: -XXX Any changes to platform support should be listed in the sections below. + no warnings "experimental::declared_refs"; **** PATCH TRUNCATED AT 2000 LINES -- 229 NOT SHOWN **** -- Perl5 Master Repository
