This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update autodie to CPAN version 2.31
authorChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Thu, 9 Jan 2020 12:02:03 +0000 (12:02 +0000)
committerChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Thu, 9 Jan 2020 12:03:31 +0000 (12:03 +0000)
  [DELTA]

2.31      2020-01-08 00:37:45-06:00 America/Chicago

        * TEST BUGFIX: Correct diag explain in t/version.t
          so it'll pass on perl 5.8

        * TEST BUGFIX: Only test t/no-all.t if optional
          IPC::System::Simple is available

        * BUILD: Switch automated testing to github actions

        * TEST BUGFIX: Turn off t/kill.t for windows. Recent
          versions of windows seem to choke when doing:
          `kill 0, $$;`

2.30      2020-01-02 16:51:16-06:00 America/Chicago

        * BUGFIX: Fix a boolean logic precedence error causing
          a "useless use of numeric" warning when using kill
          with a signal of 0.  Thanks to Maurice Aubrey for
          reporting the issue and providing a Pull Request
          for it.  (GH#76)

        * BUGFIX: Apply patch from Niko Tyni to fix a scoping
          issue "no autodie" and the "system" sub.  (GH#69)

        * BUGFIX / DOC: Update code and documentation about
          smartmatch to match current the current support
          in perl.  Thanks to Zefram; cherry-picked from
          perl core.  (GH#83)

        * DOC: Fix a POD error and some unnecessary spaces
          that tripped POD parsers.  Thanks to Aaron Crane
          and Chase Whitener for reporting the issues plus
          providing Pull Requests for it.  (GH#51 and GH#79)

        * DOC: Document how to use Import::Into with autodie.
          (GH#50)

        * BUILD: Clean up of dzil.ini removing some unnecessary
          test recommends.  Thanks to Karen Etheridge for
          reporting the issue and providing a Pull Requests
          for it.  (GH#78)

        * TEST BUGFIX: Set binmode on some file handles to fix
          issues on Windows.  Thanks to Tony Cook; cherry-picked
          from perl core.  (GH#83)

        * TEST / INTERNAL / TRAVIS: Also test with Perl 5.22,
          5.24, 5.26 and 5.28.

16 files changed:
MANIFEST
Porting/Maintainers.pl
cpan/autodie/lib/Fatal.pm
cpan/autodie/lib/autodie.pm
cpan/autodie/lib/autodie/Scope/Guard.pm
cpan/autodie/lib/autodie/Scope/GuardStack.pm
cpan/autodie/lib/autodie/Util.pm
cpan/autodie/lib/autodie/exception.pm
cpan/autodie/lib/autodie/exception/system.pm
cpan/autodie/lib/autodie/hints.pm
cpan/autodie/lib/autodie/skip.pm
cpan/autodie/t/kill.t
cpan/autodie/t/no-all.t [new file with mode: 0644]
cpan/autodie/t/no-default.t [new file with mode: 0644]
cpan/autodie/t/version.t
t/porting/customized.dat

index b498d4c..bf10840 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -116,6 +116,8 @@ cpan/autodie/t/lib/pujHa/ghach.pm   autodie - Like a Klingon
 cpan/autodie/t/lib/pujHa/ghach/Dotlh.pm        autodie - With Klingon honour
 cpan/autodie/t/lib/Some/Module.pm      autodie - blog_hints.t helper
 cpan/autodie/t/mkdir.t                 autodie - filesystem tests
+cpan/autodie/t/no-all.t
+cpan/autodie/t/no-default.t
 cpan/autodie/t/no_carp.t
 cpan/autodie/t/open.t                  autodie - Testing open
 cpan/autodie/t/read.t
index 043f100..450dee4 100755 (executable)
@@ -137,11 +137,12 @@ use File::Glob qw(:case);
     },
 
     'autodie' => {
-        'DISTRIBUTION' => 'PJF/autodie-2.29.tar.gz',
+        'DISTRIBUTION' => 'TODDR/autodie-2.31.tar.gz',
         'FILES'        => q[cpan/autodie],
         'EXCLUDED'     => [
             qr{benchmarks},
             qr{README\.md},
+            qr{^xt/},
             # All these tests depend upon external
             # modules that don't exist when we're
             # building the core.  Hence, they can
@@ -159,17 +160,6 @@ use File::Glob qw(:case);
                 t/system.t
                 )
         ],
-        'CUSTOMIZED'   => [
-           # CPAN RT 105344
-           't/mkdir.t',
-           # smartmatch changes
-           'lib/autodie/exception.pm',
-           'lib/autodie/hints.pm',
-           't/exceptions.t',
-           't/lib/Hints_pod_examples.pm',
-            # CPAN RT#127762
-            't/recv.t',
-        ],
     },
 
     'AutoLoader' => {
index 16e1743..fd78e3b 100644 (file)
@@ -8,7 +8,7 @@ use strict;
 use warnings;
 use Tie::RefHash;   # To cache subroutine refs
 use Config;
-use Scalar::Util qw(set_prototype);
+use Scalar::Util qw(set_prototype looks_like_number);
 
 use autodie::Util qw(
   fill_protos
@@ -55,7 +55,7 @@ use constant ERROR_58_HINTS => q{Non-subroutine %s hints for %s are not supporte
 
 use constant MIN_IPC_SYS_SIMPLE_VER => 0.12;
 
-our $VERSION = '2.29'; # VERSION: Generated by DZP::OurPkg::Version
+our $VERSION = '2.31'; # VERSION: Generated by DZP::OurPkg::Version
 
 our $Debug ||= 0;
 
@@ -165,6 +165,8 @@ my %TAGS = (
     ':2.27'  => [qw(:default)],
     ':2.28'  => [qw(:default)],
     ':2.29'  => [qw(:default)],
+    ':2.30'  => [qw(:default)],
+    ':2.31'  => [qw(:default)],
 );
 
 
@@ -580,7 +582,12 @@ sub unimport {
         # Record the current sub to be reinstalled at end of scope
         # and then restore the original (can be undef for "CORE::"
         # subs)
-        $reinstall_subs{$symbol} = \&$sub;
+
+        {
+            no strict 'refs';  ## no critic # to avoid: Can't use string (...) as a symbol ref ...
+            $reinstall_subs{$symbol} = \&$sub
+                if exists ${"${pkg}::"}{$symbol};
+        }
         $uninstall_subs{$symbol} = $Original_user_sub{$sub};
 
     }
@@ -1023,6 +1030,26 @@ sub _one_invocation {
         };
     }
 
+    if ($call eq 'CORE::kill') {
+
+        return qq[
+
+            my \$num_things = \@_ - $Returns_num_things_changed{$call};
+            my \$context = ! defined wantarray() ? 'void' : 'scalar';
+            my \$signal = \$_[0];
+            my \$retval = $call(@argv);
+            my \$sigzero = looks_like_number( \$signal ) && \$signal == 0;
+
+            if (    (   \$sigzero && \$context eq 'void' )
+                 or ( ! \$sigzero && \$retval != \$num_things ) ) {
+
+                $die;
+            }
+
+            return \$retval;
+        ];
+    }
+
     if (exists $Returns_num_things_changed{$call}) {
 
         # Some things return the number of things changed (like
index 5934c13..df52fb0 100644 (file)
@@ -9,7 +9,7 @@ our $VERSION;
 # ABSTRACT: Replace functions with ones that succeed or die with lexical scope
 
 BEGIN {
-    our $VERSION = '2.29'; # VERSION: Generated by DZP::OurPkg::Version
+    our $VERSION = '2.31'; # VERSION: Generated by DZP::OurPkg::Version
 }
 
 use constant ERROR_WRONG_FATAL => q{
@@ -116,32 +116,6 @@ Exceptions produced by the C<autodie> pragma are members of the
 L<autodie::exception> class.  The preferred way to work with
 these exceptions under Perl 5.10 is as follows:
 
-    use feature qw(switch);
-
-    eval {
-        use autodie;
-
-        open(my $fh, '<', $some_file);
-
-        my @records = <$fh>;
-
-        # Do things with @records...
-
-        close($fh);
-
-    };
-
-    given ($@) {
-        when (undef)   { say "No error";                    }
-        when ('open')  { say "Error from open";             }
-        when (':io')   { say "Non-open, IO error.";         }
-        when (':all')  { say "All other autodie errors."    }
-        default        { say "Not an autodie error at all." }
-    }
-
-Under Perl 5.8, the C<given/when> structure is not available, so the
-following structure may be used:
-
     eval {
         use autodie;
 
@@ -268,7 +242,7 @@ C<system> and C<exec> with:
 
 =head2 print
 
-The autodie pragma B<<does not check calls to C<print>>>.
+The autodie pragma B<does not check calls to C<print>Z<>>.
 
 =head2 flock
 
@@ -370,6 +344,14 @@ any hints available.
 
 See also L<Fatal/DIAGNOSTICS>.
 
+=head1 Tips and Tricks
+
+=head2 Importing autodie into another namespace than "caller"
+
+It is possible to import autodie into a different namespace by using
+L<Import::Into>.  However, you have to pass a "caller depth" (rather
+than a package name) for this to work correctly.
+
 =head1 BUGS
 
 "Used only once" warnings can be generated when C<autodie> or C<Fatal>
index bd34fc8..065c5ba 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 
 # ABSTRACT: Wrapper class for calling subs at end of scope
-our $VERSION = '2.29'; # VERSION
+our $VERSION = '2.31'; # VERSION
 
 # This code schedules the cleanup of subroutines at the end of
 # scope.  It's directly inspired by chocolateboy's excellent
index 3ee3ae5..bd19f5b 100644 (file)
@@ -6,7 +6,7 @@ use warnings;
 use autodie::Scope::Guard;
 
 # ABSTRACT: Hook stack for managing scopes via %^H
-our $VERSION = '2.29'; # VERSION
+our $VERSION = '2.31'; # VERSION
 
 my $H_KEY_STEM = __PACKAGE__ . '/guard';
 my $COUNTER = 0;
index 2a308a8..ead05d4 100644 (file)
@@ -14,7 +14,7 @@ our @EXPORT_OK = qw(
   on_end_of_compile_scope
 );
 
-our $VERSION = '2.29'; # VERSION: Generated by DZP::OurPkg:Version
+our $VERSION = '2.31'; # VERSION: Generated by DZP::OurPkg:Version
 
 # ABSTRACT: Internal Utility subroutines for autodie and Fatal
 
index 8743719..e249eff 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 use Carp qw(croak);
 
-our $VERSION = '2.29002';
+our $VERSION = '2.31'; # VERSION: Generated by DZP::OurPkg:Version
 # ABSTRACT: Exceptions from autodying functions.
 
 our $DEBUG = 0;
index e6305fd..df771c9 100644 (file)
@@ -5,7 +5,7 @@ use warnings;
 use parent 'autodie::exception';
 use Carp qw(croak);
 
-our $VERSION = '2.29'; # VERSION: Generated by DZP::OurPkg:Version
+our $VERSION = '2.31'; # VERSION: Generated by DZP::OurPkg:Version
 
 # ABSTRACT: Exceptions from autodying system().
 
index be9fbce..dac6e9d 100644 (file)
@@ -5,7 +5,7 @@ use warnings;
 
 use constant PERL58 => ( $] < 5.009 );
 
-our $VERSION = '2.29001';
+our $VERSION = '2.31'; # VERSION: Generated by DZP::OurPkg:Version
 
 # ABSTRACT: Provide hints about user subroutines to autodie
 
@@ -121,7 +121,7 @@ other things.  You can specify different hints for how
 failure should be identified in scalar and list contexts.
 
 These examples apply for use in the C<AUTODIE_HINTS> subroutine and when
-calling C<autodie::hints->set_hints_for()>.
+calling C<< autodie::hints->set_hints_for() >>.
 
 The most common context-specific hints are:
 
index 9a048fe..9d2dbc8 100644 (file)
@@ -2,7 +2,7 @@ package autodie::skip;
 use strict;
 use warnings;
 
-our $VERSION = '2.29'; # VERSION
+our $VERSION = '2.31'; # VERSION
 
 # This package exists purely so people can inherit from it,
 # which isn't at all how roles are supposed to work, but it's
index 22d4b36..eb2083f 100644 (file)
@@ -5,6 +5,10 @@ use autodie;
 
 use constant SYSINIT => 1;
 
+if ($^O eq 'MSWin32') {
+    plan skip_all => "Can't send signals to own process on recent versions of Windows.";
+}
+
 if (not CORE::kill(0,$$)) {
     plan skip_all => "Can't send signals to own process on this system.";
 }
@@ -13,14 +17,22 @@ if (CORE::kill(0, SYSINIT)) {
     plan skip_all => "Can unexpectedly signal process 1. Won't run as root.";
 }
 
-plan tests => 4;
+$SIG{HUP} = sub { }; # Ignore SIGHUP
+
+plan tests => 6;
 
-eval { kill(0, $$); };
+eval { my $rv = kill(0, $$); };
 is($@, '', "Signalling self is fine");
 
-eval { kill(0, SYSINIT ) };
-isa_ok($@, 'autodie::exception', "Signalling init is not allowed.");
+eval { kill('HUP', $$); };
+is($@, '', "Kill with non-zero signal, in void context is ok");
+
+eval { kill(0, SYSINIT) };
+isa_ok($@, 'autodie::exception', "kill 0 should die if called in void context");
+
+eval { my $rv = kill(0, SYSINIT) };
+is($@, '', "kill 0 should never die if called in scalar context");
 
-eval { kill(0, $$, SYSINIT) };
+eval { my $rv = kill('HUP', $$, SYSINIT) };
 isa_ok($@, 'autodie::exception', 'kill exception on single failure.');
 is($@->return, 1, "kill fails correctly on a 'true' failure.");
diff --git a/cpan/autodie/t/no-all.t b/cpan/autodie/t/no-all.t
new file mode 100644 (file)
index 0000000..fadd045
--- /dev/null
@@ -0,0 +1,30 @@
+#!/usr/bin/perl
+
+package foo;
+use warnings;
+use strict;
+
+use Test::More;
+
+BEGIN {
+    eval 'use IPC::System::Simple';  ## no critic
+    plan skip_all => "Optional IPC::System::Simple required to do this test" if $@;
+}
+plan tests => 1;
+
+use autodie qw(:all);
+
+use_system();
+ok("system() works with a lexical 'no autodie' block (github issue #69");
+
+sub break_system {
+    no autodie;
+    open(my $fh, "<", 'NONEXISTENT');
+    ok("survived failing open");
+}
+
+sub use_system {
+    system($^X, '-e' , 1);
+}
+
+1;
diff --git a/cpan/autodie/t/no-default.t b/cpan/autodie/t/no-default.t
new file mode 100644 (file)
index 0000000..44d2acf
--- /dev/null
@@ -0,0 +1,23 @@
+#!/usr/bin/perl
+
+package foo;
+use warnings;
+use strict;
+use Test::More tests => 2;
+use autodie;
+
+
+use_system();
+ok("system() works with a lexical 'no autodie' block (github issue #69");
+break_system();
+
+sub break_system {
+    no autodie;
+    open(my $fh, "<", 'NONEXISTENT');
+    ok("survived failing open");
+}
+
+sub use_system {
+    system($^X, '-e' , 1);
+}
+1;
index 7accf05..5fad742 100644 (file)
@@ -5,6 +5,11 @@ use Test::More;
 if (not $ENV{RELEASE_TESTING}) {
     plan( skip_all => 'Release test.  Set $ENV{RELEASE_TESTING} to true to run.');
 }
+
+if( $ENV{AUTOMATED_TESTING} ) {
+    plan( skip_all => 'This test requires dzil and that is not supported on github actions');
+}
+
 plan tests => 8;
 
 # For the moment, we'd like all our versions to be the same.
@@ -18,6 +23,8 @@ require autodie::hints;
 require autodie::exception;
 require autodie::exception::system;
 
+diag(explain(\%ENV));
+
 ok(defined($autodie::VERSION), 'autodie has a version');
 ok(defined($autodie::exception::VERSION), 'autodie::exception has a version');
 ok(defined($autodie::hints::VERSION), 'autodie::hints has a version');
index 34652cf..371a416 100644 (file)
@@ -23,12 +23,6 @@ Pod::Perldoc cpan/Pod-Perldoc/lib/Pod/Perldoc.pm 582be34c077c9ff44d99914724a0cc2
 Pod::Usage cpan/Pod-Usage/t/pod/testp2pt.pl d43ea8391bd95aefdb710ab2947771155a88d424
 Win32API::File cpan/Win32API-File/File.pm 8fd212857f821cb26648878b96e57f13bf21b99e
 Win32API::File cpan/Win32API-File/File.xs beb870fed4490d2faa547b4a8576b8d64d1d27c5
-autodie cpan/autodie/lib/autodie/exception.pm b99e4e35a9ed36de94d54437888822ced4936207
-autodie cpan/autodie/lib/autodie/hints.pm e1998fec61fb4e82fe46585bd82c73200be6f262
-autodie cpan/autodie/t/exceptions.t ad315a208f875e06b0964012ce8d65daa438c036
-autodie cpan/autodie/t/lib/Hints_pod_examples.pm 6944c218e9754b3613c8d0c90a5ae8aceccb5c99
-autodie cpan/autodie/t/mkdir.t 9e70d2282a3cc7d76a78bf8144fccba20fb37dac
-autodie cpan/autodie/t/recv.t 63bea2daa330e44b67714527ddf701c1bf3a6954
 experimental cpan/experimental/t/basic.t cb9da8dd05b854375809872a05dd32637508d5da
 version cpan/version/lib/version.pm 7ef9219d1d5f1d71f08a79f3b0577df138b21b12
 version vutil.c 601cc57bbc0070ae33eab7fd2d667f20efbe15f8