In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/8da080293c01461bf666873a6d2ee759f47052b0?hp=79656330a0811b95642a8239e923166ada7fb0a0>
- Log ----------------------------------------------------------------- commit 8da080293c01461bf666873a6d2ee759f47052b0 Author: Chris 'BinGOs' Williams <ch...@bingosnet.co.uk> Date: Fri Sep 22 11:15:28 2017 +0100 Update Time-HiRes to CPAN version 1.9746 [DELTA] 1.9746 [2017-08-17] - Unreliable t/usleep.t and t/utime.t tests [rt.cpan.org #122819] Avoid testing for $dt = $t2 - $t1 and assuming $dt is less than some value since a heavily loaded machine can delay the $t2. Testing for greater than is fine. - Tweak the configuring messages about subsecond stat/utime. 1.9745 [2017-08-14] - Properly check for futimens/utimensat actually doing something. This should handle 'gnukfreebsd' (which has only stubs, so far we have been skipping the test) and as a new thing 'gnu' (Hurd) (also only stubs). Thanks to Nigel Horne. - Scan in t/utime.t whether the filesystem (wherever File::Temp puts it tempfiles) supports subsecond timestamps. This removes the fragile Linux/ext3 specific hack. As a side effect, the setting of subsecond timestamps is tested only if reading of them is supported. Thanks to Carsten Gaebler for the test idea, and Ryan Voots for testing. 1.9744 [2017-07-27] - add more potential clock constants, like CLOCK_MONOTONIC_FAST (available in FreeBSD), and not all potentially found clock constants were properly exported to be available from Perl, see your system's clock_gettime() documentation for the available ones 1.9743 [2017-07-20] - correct declared minimum Perl version (should be 5.6, was declared as 5.8 since 1.9727_03): blead af94b3ac - fix the fix for 'do file' to load hints in Makefile.PL: blead 3172fdbc M Porting/Maintainers.pl M dist/Time-HiRes/Changes M dist/Time-HiRes/HiRes.pm M dist/Time-HiRes/Makefile.PL M dist/Time-HiRes/t/usleep.t M dist/Time-HiRes/t/utime.t commit fd481c1750298b9abda12a8359d56200a571a751 Author: Chris 'BinGOs' Williams <ch...@bingosnet.co.uk> Date: Fri Sep 22 11:13:52 2017 +0100 Update Time-Piece to CPAN version 1.3202 [DELTA] 1.3202 2017-09-13 - Fix AIX compile M Porting/Maintainers.pl M cpan/Time-Piece/Piece.pm M cpan/Time-Piece/Piece.xs M cpan/Time-Piece/Seconds.pm commit 9cdceef4a20beadabf31e63ceddbbb6fb7858583 Author: Chris 'BinGOs' Williams <ch...@bingosnet.co.uk> Date: Fri Sep 22 11:10:18 2017 +0100 Update Scalar-List-Utils to CPAN version 1.49 [DELTA] 1.49 -- 2017-09-08 12:25:54 [CHANGES] * Fixes for unit tests to pass on perl 5.6.2 * Fix typo in documentation M Porting/Maintainers.pl M cpan/Scalar-List-Utils/lib/List/Util.pm M cpan/Scalar-List-Utils/lib/List/Util/XS.pm M cpan/Scalar-List-Utils/lib/Scalar/Util.pm M cpan/Scalar-List-Utils/lib/Sub/Util.pm M cpan/Scalar-List-Utils/t/product.t M cpan/Scalar-List-Utils/t/rt-96343.t M cpan/Scalar-List-Utils/t/sum.t M cpan/Scalar-List-Utils/t/uniq.t commit 07e6e0356e959c4ea689efa493e3deec6669eb89 Author: Chris 'BinGOs' Williams <ch...@bingosnet.co.uk> Date: Fri Sep 22 11:08:35 2017 +0100 Update File-Path to CPAN version 2.15 [DELTA] 2.15 2017-07-29 - Correct documentation error re possible arguments for rmtree(). M Porting/Maintainers.pl M cpan/File-Path/lib/File/Path.pm M cpan/File-Path/t/Path.t commit f4f12f2f3d60c9f8be71b8dd5dc680df5081e6fb Author: Chris 'BinGOs' Williams <ch...@bingosnet.co.uk> Date: Fri Sep 22 11:05:46 2017 +0100 Update Digest-SHA to CPAN version 5.97 [DELTA] 5.97 Wed Sep 6 02:23:02 MST 2017 - added 'quiet' option to shasum -- thanks to Chris David for suggestion and initial patch -- ref. rt.cpan.org #122750 - expanded shasum --help message -- to explain use of escaped FILE names M Porting/Maintainers.pl M cpan/Digest-SHA/lib/Digest/SHA.pm M cpan/Digest-SHA/shasum M cpan/Digest-SHA/src/sha.c M cpan/Digest-SHA/src/sha.h M cpan/Digest-SHA/src/sha64bit.c M cpan/Digest-SHA/src/sha64bit.h ----------------------------------------------------------------------- Summary of changes: Porting/Maintainers.pl | 11 +-- cpan/Digest-SHA/lib/Digest/SHA.pm | 5 +- cpan/Digest-SHA/shasum | 30 +++++--- cpan/Digest-SHA/src/sha.c | 6 +- cpan/Digest-SHA/src/sha.h | 6 +- cpan/Digest-SHA/src/sha64bit.c | 6 +- cpan/Digest-SHA/src/sha64bit.h | 6 +- cpan/File-Path/lib/File/Path.pm | 16 ++-- cpan/File-Path/t/Path.t | 20 ++--- cpan/Scalar-List-Utils/lib/List/Util.pm | 4 +- cpan/Scalar-List-Utils/lib/List/Util/XS.pm | 2 +- cpan/Scalar-List-Utils/lib/Scalar/Util.pm | 2 +- cpan/Scalar-List-Utils/lib/Sub/Util.pm | 2 +- cpan/Scalar-List-Utils/t/product.t | 4 + cpan/Scalar-List-Utils/t/rt-96343.t | 4 +- cpan/Scalar-List-Utils/t/sum.t | 1 + cpan/Scalar-List-Utils/t/uniq.t | 7 +- cpan/Time-Piece/Piece.pm | 2 +- cpan/Time-Piece/Piece.xs | 4 +- cpan/Time-Piece/Seconds.pm | 2 +- dist/Time-HiRes/Changes | 31 +++++++- dist/Time-HiRes/HiRes.pm | 39 +++++++--- dist/Time-HiRes/Makefile.PL | 118 +++++++++++++++++------------ dist/Time-HiRes/t/usleep.t | 4 +- dist/Time-HiRes/t/utime.t | 74 +++++++++--------- 25 files changed, 249 insertions(+), 157 deletions(-) diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 81b462c052..c8ae4af7ee 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -370,7 +370,7 @@ use File::Glob qw(:case); }, 'Digest::SHA' => { - 'DISTRIBUTION' => 'MSHELOR/Digest-SHA-5.96.tar.gz', + 'DISTRIBUTION' => 'MSHELOR/Digest-SHA-5.97.tar.gz', 'FILES' => q[cpan/Digest-SHA], 'EXCLUDED' => [ qw( t/pod.t @@ -492,7 +492,7 @@ use File::Glob qw(:case); }, 'File::Path' => { - 'DISTRIBUTION' => 'JKEENAN/File-Path-2.14.tar.gz', + 'DISTRIBUTION' => 'JKEENAN/File-Path-2.15.tar.gz', 'FILES' => q[cpan/File-Path], 'EXCLUDED' => [ qw(t/Path-Class.t), @@ -957,7 +957,7 @@ use File::Glob qw(:case); }, 'Scalar-List-Utils' => { - 'DISTRIBUTION' => 'PEVANS/Scalar-List-Utils-1.48.tar.gz', + 'DISTRIBUTION' => 'PEVANS/Scalar-List-Utils-1.49.tar.gz', 'FILES' => q[cpan/Scalar-List-Utils], }, @@ -1176,7 +1176,7 @@ use File::Glob qw(:case); }, 'Time::HiRes' => { - 'DISTRIBUTION' => 'JHI/Time-HiRes-1.9742.tar.gz', + 'DISTRIBUTION' => 'JHI/Time-HiRes-1.9746.tar.gz', 'FILES' => q[dist/Time-HiRes], }, @@ -1195,8 +1195,9 @@ use File::Glob qw(:case); }, 'Time::Piece' => { - 'DISTRIBUTION' => 'ESAYM/Time-Piece-1.3201.tar.gz', + 'DISTRIBUTION' => 'ESAYM/Time-Piece-1.3202.tar.gz', 'FILES' => q[cpan/Time-Piece], + 'EXCLUDED' => [ qw[reverse_deps.txt] ], }, 'Unicode::Collate' => { diff --git a/cpan/Digest-SHA/lib/Digest/SHA.pm b/cpan/Digest-SHA/lib/Digest/SHA.pm index e2c58f66e1..e8500367ac 100644 --- a/cpan/Digest-SHA/lib/Digest/SHA.pm +++ b/cpan/Digest-SHA/lib/Digest/SHA.pm @@ -8,7 +8,7 @@ use vars qw($VERSION @ISA @EXPORT_OK); use Fcntl qw(O_RDONLY); use integer; -$VERSION = '5.96'; +$VERSION = '5.97'; require Exporter; require DynaLoader; @@ -790,6 +790,7 @@ The author is particularly grateful to Sean Burke Chris Carey Alexandr Ciornii + Chris David Jim Doble Thomas Drugeon Julius Duque @@ -813,7 +814,7 @@ darkness and moored it in so perfect a calm and in so brilliant a light" =head1 COPYRIGHT AND LICENSE -Copyright (C) 2003-2016 Mark Shelor +Copyright (C) 2003-2017 Mark Shelor This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/cpan/Digest-SHA/shasum b/cpan/Digest-SHA/shasum index 2721117151..59c3839b2e 100644 --- a/cpan/Digest-SHA/shasum +++ b/cpan/Digest-SHA/shasum @@ -2,10 +2,10 @@ ## shasum: filter for computing SHA digests (ref. sha1sum/md5sum) ## - ## Copyright (C) 2003-2016 Mark Shelor, All Rights Reserved + ## Copyright (C) 2003-2017 Mark Shelor, All Rights Reserved ## - ## Version: 5.96 - ## Wed Jul 27 20:04:34 MST 2016 + ## Version: 5.97 + ## Wed Sep 6 02:23:02 MST 2017 ## shasum SYNOPSIS adapted from GNU Coreutils sha1sum. Add ## "-a" option for algorithm selection, @@ -44,8 +44,9 @@ shasum - Print or Check SHA Checksums all other characters ignored -p, --portable read in portable mode (to be deprecated) - The following two options are useful only when verifying checksums: + The following three options are useful only when verifying checksums: -s, --status don't output anything, status code shows success + -q, --quiet don't print OK for each successfully verified file -w, --warn warn about improperly formatted checksum lines -h, --help display this help and exit @@ -60,7 +61,10 @@ shasum - Print or Check SHA Checksums the input should be a former output of this program. The default mode is to print a line with checksum, a character indicating type (`*' for binary, ` ' for text, `U' for UNIVERSAL, `^' for BITS, `?' - for portable), and name for each FILE. + for portable), and name for each FILE. The line starts with a `\' + character if the FILE name contains either newlines or backslashes, + which are then replaced by the two-character sequences `\n' and `\\' + respectively. Report shasum bugs to mshe...@cpan.org @@ -92,7 +96,7 @@ the 7-bit message I<0001100>: =head1 AUTHOR -Copyright (c) 2003-2016 Mark Shelor <mshe...@cpan.org>. +Copyright (c) 2003-2017 Mark Shelor <mshe...@cpan.org>. =head1 SEE ALSO @@ -103,7 +107,7 @@ L<Digest::SHA::PurePerl>. END_OF_POD -my $VERSION = "5.96"; +my $VERSION = "5.97"; sub usage { my($err, $msg) = @_; @@ -130,7 +134,7 @@ select((select(STDERR), $| = 1)[0]); ## Collect options from command line -my ($alg, $binary, $check, $text, $status, $warn, $help, $version); +my ($alg, $binary, $check, $text, $status, $quiet, $warn, $help, $version); my ($portable, $BITS, $reverse, $UNIVERSAL, $versions); eval { Getopt::Long::Configure ("bundling") }; @@ -138,6 +142,7 @@ GetOptions( 'b|binary' => \$binary, 'c|check' => \$check, 't|text' => \$text, 'a|algorithm=i' => \$alg, 's|status' => \$status, 'w|warn' => \$warn, + 'q|quiet' => \$quiet, 'h|help' => \$help, 'v|version' => \$version, 'p|portable' => \$portable, '0|01' => \$BITS, @@ -158,6 +163,8 @@ usage(1, "shasum: --warn option used only when verifying checksums\n") if $warn && !$check; usage(1, "shasum: --status option used only when verifying checksums\n") if $status && !$check; +usage(1, "shasum: --quiet option used only when verifying checksums\n") + if $quiet && !$check; ## Try to use Digest::SHA. If not installed, use the slower @@ -258,7 +265,7 @@ sub verify { my $checkfile = shift; my ($err, $fmt_errs, $read_errs, $match_errs) = (0, 0, 0, 0); my ($num_lines, $num_files) = (0, 0); - my ($bslash, $sum, $fname, $rsp, $digest); + my ($bslash, $sum, $fname, $rsp, $digest, $isOK); local *FH; $checkfile eq '-' and open(FH, '< -') @@ -283,15 +290,16 @@ sub verify { $rsp = "$fname: "; $num_files++; ($binary, $text, $UNIVERSAL, $BITS, $portable) = map { $_ eq $modesym } ('*', ' ', 'U', '^', 'p'); + $isOK = 0; unless ($digest = sumfile($fname)) { $rsp .= "FAILED open or read\n"; $err = 1; $read_errs++; } else { - if (lc($sum) eq $digest) { $rsp .= "OK\n" } + if (lc($sum) eq $digest) { $rsp .= "OK\n"; $isOK = 1 } else { $rsp .= "FAILED\n"; $err = 1; $match_errs++ } } - print $rsp unless $status; + print $rsp unless ($status || ($quiet && $isOK)); } close(FH); unless ($num_files) { diff --git a/cpan/Digest-SHA/src/sha.c b/cpan/Digest-SHA/src/sha.c index fae9bb4f6e..51f472cd1d 100644 --- a/cpan/Digest-SHA/src/sha.c +++ b/cpan/Digest-SHA/src/sha.c @@ -3,10 +3,10 @@ * * Ref: NIST FIPS PUB 180-4 Secure Hash Standard * - * Copyright (C) 2003-2016 Mark Shelor, All Rights Reserved + * Copyright (C) 2003-2017 Mark Shelor, All Rights Reserved * - * Version: 5.96 - * Wed Jul 27 20:04:34 MST 2016 + * Version: 5.97 + * Wed Sep 6 02:23:02 MST 2017 * */ diff --git a/cpan/Digest-SHA/src/sha.h b/cpan/Digest-SHA/src/sha.h index ca34741342..9fd6feb9e5 100644 --- a/cpan/Digest-SHA/src/sha.h +++ b/cpan/Digest-SHA/src/sha.h @@ -3,10 +3,10 @@ * * Ref: NIST FIPS PUB 180-4 Secure Hash Standard * - * Copyright (C) 2003-2016 Mark Shelor, All Rights Reserved + * Copyright (C) 2003-2017 Mark Shelor, All Rights Reserved * - * Version: 5.96 - * Wed Jul 27 20:04:34 MST 2016 + * Version: 5.97 + * Wed Sep 6 02:23:02 MST 2017 * */ diff --git a/cpan/Digest-SHA/src/sha64bit.c b/cpan/Digest-SHA/src/sha64bit.c index 860b52c0ef..be02564eb5 100644 --- a/cpan/Digest-SHA/src/sha64bit.c +++ b/cpan/Digest-SHA/src/sha64bit.c @@ -3,10 +3,10 @@ * * Ref: NIST FIPS PUB 180-4 Secure Hash Standard * - * Copyright (C) 2003-2016 Mark Shelor, All Rights Reserved + * Copyright (C) 2003-2017 Mark Shelor, All Rights Reserved * - * Version: 5.96 - * Wed Jul 27 20:04:34 MST 2016 + * Version: 5.97 + * Wed Sep 6 02:23:02 MST 2017 * */ diff --git a/cpan/Digest-SHA/src/sha64bit.h b/cpan/Digest-SHA/src/sha64bit.h index aef4426efe..4e1d7990e7 100644 --- a/cpan/Digest-SHA/src/sha64bit.h +++ b/cpan/Digest-SHA/src/sha64bit.h @@ -3,10 +3,10 @@ * * Ref: NIST FIPS PUB 180-4 Secure Hash Standard * - * Copyright (C) 2003-2016 Mark Shelor, All Rights Reserved + * Copyright (C) 2003-2017 Mark Shelor, All Rights Reserved * - * Version: 5.96 - * Wed Jul 27 20:04:34 MST 2016 + * Version: 5.97 + * Wed Sep 6 02:23:02 MST 2017 * * The following macros supply placeholder values that enable the * sha.c module to successfully compile when 64-bit integer types diff --git a/cpan/File-Path/lib/File/Path.pm b/cpan/File-Path/lib/File/Path.pm index 2b765e189f..b4fb5a2c48 100644 --- a/cpan/File-Path/lib/File/Path.pm +++ b/cpan/File-Path/lib/File/Path.pm @@ -18,7 +18,7 @@ BEGIN { use Exporter (); use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); -$VERSION = '2.14'; +$VERSION = '2.15'; $VERSION = eval $VERSION; @ISA = qw(Exporter); @EXPORT = qw(mkpath rmtree); @@ -633,7 +633,7 @@ File::Path - Create or remove directory trees =head1 VERSION -2.14 - released June 07 2016. +2.15 - released June 07 2017. =head1 SYNOPSIS @@ -774,12 +774,14 @@ identical to C<make_path()>. The C<remove_tree> function deletes the given directories and any files and subdirectories they might contain, much like the Unix -command C<rm -rf> or the Windows commands C<rmdir /s> and C<rd /s>. The -only exception to the function similarity is that C<remove_tree> accepts -only directories whereas C<rm -rf> also accepts files. +command C<rm -rf> or the Windows commands C<rmdir /s> and C<rd /s>. -The function accepts a list of directories to be -removed. Its behaviour may be tuned by an optional hashref +The function accepts a list of directories to be removed. (In point of fact, +it will also accept filesystem entries which are not directories, such as +regular files and symlinks. But, as its name suggests, its intent is to +remove trees rather than individual files.) + +C<remove_tree()>'s behaviour may be tuned by an optional hashref appearing as the last parameter on the call. If an empty string is passed to C<remove_tree>, an error will occur. diff --git a/cpan/File-Path/t/Path.t b/cpan/File-Path/t/Path.t index 7eb85721e9..8ea3d87c9a 100644 --- a/cpan/File-Path/t/Path.t +++ b/cpan/File-Path/t/Path.t @@ -3,7 +3,7 @@ use strict; -use Test::More tests => 167; +use Test::More tests => 165; use Config; use Fcntl ':mode'; use lib './t'; @@ -816,7 +816,7 @@ is( } SKIP: { - my $skip_count = 5; + my $skip_count = 3; skip "Windows will not set this error condition", $skip_count if $^O eq 'MSWin32'; @@ -826,10 +826,10 @@ SKIP: { my (@created, $error); my $user = join('_' => 'foobar', $$); @created = mkpath($deepest, { mode => 0711, user => $user, error => \$error }); - TODO: { - local $TODO = "Notwithstanding the phony 'user', mkpath will actually create subdirectories; should it?"; - is(scalar(@created), 0, "No subdirectories created"); - } +# TODO: { +# local $TODO = "Notwithstanding the phony 'user', mkpath will actually create subdirectories; should it?"; +# is(scalar(@created), 0, "No subdirectories created"); +# } is(scalar(@$error), 1, "caught error condition" ); my ($file, $message) = each %{$error->[0]}; like($message, @@ -878,10 +878,10 @@ SKIP: { my (@created, $error); my $bad_group = join('_' => 'foobarbaz', $$); @created = mkpath($deepest, { mode => 0711, group => $bad_group, error => \$error }); - TODO: { - local $TODO = "Notwithstanding the phony 'group', mkpath will actually create subdirectories; should it?"; - is(scalar(@created), 0, "No subdirectories created"); - } +# TODO: { +# local $TODO = "Notwithstanding the phony 'group', mkpath will actually create subdirectories; should it?"; +# is(scalar(@created), 0, "No subdirectories created"); +# } is(scalar(@$error), 1, "caught error condition" ); my ($file, $message) = each %{$error->[0]}; like($message, diff --git a/cpan/Scalar-List-Utils/lib/List/Util.pm b/cpan/Scalar-List-Utils/lib/List/Util.pm index 4a03af815a..035f67f3a3 100644 --- a/cpan/Scalar-List-Utils/lib/List/Util.pm +++ b/cpan/Scalar-List-Utils/lib/List/Util.pm @@ -15,7 +15,7 @@ our @EXPORT_OK = qw( all any first min max minstr maxstr none notall product reduce sum sum0 shuffle uniq uniqnum uniqstr pairs unpairs pairkeys pairvalues pairmap pairgrep pairfirst ); -our $VERSION = "1.48"; +our $VERSION = "1.49"; our $XS_VERSION = $VERSION; $VERSION = eval $VERSION; @@ -116,7 +116,7 @@ C<undef> being returned The above example code blocks also suggest how to use C<reduce> to build a more efficient combined version of one of these basic functions and a C<map> -block. For example, to find the total length of the all the strings in a list, +block. For example, to find the total length of all the strings in a list, we could use $total = sum map { length } @strings; diff --git a/cpan/Scalar-List-Utils/lib/List/Util/XS.pm b/cpan/Scalar-List-Utils/lib/List/Util/XS.pm index c870411578..10429a71f5 100644 --- a/cpan/Scalar-List-Utils/lib/List/Util/XS.pm +++ b/cpan/Scalar-List-Utils/lib/List/Util/XS.pm @@ -3,7 +3,7 @@ use strict; use warnings; use List::Util; -our $VERSION = "1.48"; # FIXUP +our $VERSION = "1.49"; # FIXUP $VERSION = eval $VERSION; # FIXUP 1; diff --git a/cpan/Scalar-List-Utils/lib/Scalar/Util.pm b/cpan/Scalar-List-Utils/lib/Scalar/Util.pm index ad36af3b60..00edd3b2c7 100644 --- a/cpan/Scalar-List-Utils/lib/Scalar/Util.pm +++ b/cpan/Scalar-List-Utils/lib/Scalar/Util.pm @@ -17,7 +17,7 @@ our @EXPORT_OK = qw( dualvar isdual isvstring looks_like_number openhandle readonly set_prototype tainted ); -our $VERSION = "1.48"; +our $VERSION = "1.49"; $VERSION = eval $VERSION; require List::Util; # List::Util loads the XS diff --git a/cpan/Scalar-List-Utils/lib/Sub/Util.pm b/cpan/Scalar-List-Utils/lib/Sub/Util.pm index b4ec6ac75c..ecfab702cd 100644 --- a/cpan/Scalar-List-Utils/lib/Sub/Util.pm +++ b/cpan/Scalar-List-Utils/lib/Sub/Util.pm @@ -15,7 +15,7 @@ our @EXPORT_OK = qw( subname set_subname ); -our $VERSION = "1.48"; +our $VERSION = "1.49"; $VERSION = eval $VERSION; require List::Util; # as it has the XS diff --git a/cpan/Scalar-List-Utils/t/product.t b/cpan/Scalar-List-Utils/t/product.t index 1aad877531..7b5894add3 100644 --- a/cpan/Scalar-List-Utils/t/product.t +++ b/cpan/Scalar-List-Utils/t/product.t @@ -112,8 +112,12 @@ SKIP: { is($t, (1<<31) - (1<<62), 'min * max'); $t = product($max, $min); is($t, (1<<31) - (1<<62), 'max * min'); + + SKIP: { + skip "known to fail on $]", 1 if $] le "5.006002"; $t = product($max, $max); is($t, (1<<62)-(1<<32)+1, 'max * max'); + } $t = product($min*8, $min); cmp_ok($t, '>', (1<<61), 'min*8*min'); # may be an NV diff --git a/cpan/Scalar-List-Utils/t/rt-96343.t b/cpan/Scalar-List-Utils/t/rt-96343.t index 5328a411db..4deedcb676 100644 --- a/cpan/Scalar-List-Utils/t/rt-96343.t +++ b/cpan/Scalar-List-Utils/t/rt-96343.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More; +use Test::More tests => 2; { use List::Util qw( first ); @@ -31,5 +31,3 @@ use Test::More; is( $var, 'HellO WorlD', 'any (lc$_) leaves value undisturbed' ); } - -done_testing; diff --git a/cpan/Scalar-List-Utils/t/sum.t b/cpan/Scalar-List-Utils/t/sum.t index 4639a8ac8d..1b7258c30a 100644 --- a/cpan/Scalar-List-Utils/t/sum.t +++ b/cpan/Scalar-List-Utils/t/sum.t @@ -92,6 +92,7 @@ is($v, $v1 + 42 + 2, 'bigint + builtin int'); SKIP: { skip "IV is not at least 64bit", 3 unless $Config{ivsize} >= 8; + skip "known to fail on $]", 3 if $] le "5.006002"; # Sum using NV will only preserve 53 bits of integer precision my $t = sum(1<<60, 1); diff --git a/cpan/Scalar-List-Utils/t/uniq.t b/cpan/Scalar-List-Utils/t/uniq.t index 5a6925d1f5..105c499bae 100644 --- a/cpan/Scalar-List-Utils/t/uniq.t +++ b/cpan/Scalar-List-Utils/t/uniq.t @@ -43,7 +43,8 @@ is_deeply( [ uniqstr qw( 1 1.0 1E0 ) ], 'uniqstr on undef coerces to empty-string' ); } -{ +SKIP: { + skip 'Perl 5.007003 with utf8::encode is required', 3 if $] lt "5.007003"; my $warnings = ""; local $SIG{__WARN__} = sub { $warnings .= join "", @_ }; @@ -123,7 +124,9 @@ is_deeply( [ uniq () ], is( scalar( uniqstr qw( a b c d a b e ) ), 5, 'uniqstr() in scalar context' ); -{ +SKIP: { + skip "known to fail on $]", 1 if $] le "5.006002"; + package Stringify; use overload '""' => sub { return $_[0]->{str} }; diff --git a/cpan/Time-Piece/Piece.pm b/cpan/Time-Piece/Piece.pm index a3dfc744d4..06fd25cb15 100644 --- a/cpan/Time-Piece/Piece.pm +++ b/cpan/Time-Piece/Piece.pm @@ -20,7 +20,7 @@ our %EXPORT_TAGS = ( ':override' => 'internal', ); -our $VERSION = '1.3201'; +our $VERSION = '1.3202'; bootstrap Time::Piece $VERSION; diff --git a/cpan/Time-Piece/Piece.xs b/cpan/Time-Piece/Piece.xs index 8b3d43aadf..9ff51e5216 100644 --- a/cpan/Time-Piece/Piece.xs +++ b/cpan/Time-Piece/Piece.xs @@ -1034,7 +1034,7 @@ _strptime ( string, format, got_GMT, SV* localization ) PPCODE: memset(&mytm, 0, sizeof(mytm)); - // sensible defaults. + /* sensible defaults. */ mytm.tm_mday = 1; mytm.tm_year = 70; mytm.tm_wday = 4; @@ -1047,7 +1047,7 @@ _strptime ( string, format, got_GMT, SV* localization ) croak("_strptime requires a Hash Reference of locales"); } - //populate our locale data struct (used for %[AaBbPp] flags) + /* populate our locale data struct (used for %[AaBbPp] flags) */ _populate_C_time_locale(aTHX_ locales ); remainder = (char *)_strptime(aTHX_ string, format, &mytm, &got_GMT); diff --git a/cpan/Time-Piece/Seconds.pm b/cpan/Time-Piece/Seconds.pm index af22ee299d..6e945cae5b 100644 --- a/cpan/Time-Piece/Seconds.pm +++ b/cpan/Time-Piece/Seconds.pm @@ -1,7 +1,7 @@ package Time::Seconds; use strict; -our $VERSION = '1.3201'; +our $VERSION = '1.3202'; use Exporter 5.57 'import'; diff --git a/dist/Time-HiRes/Changes b/dist/Time-HiRes/Changes index eb85a2c8f9..10af55b79d 100644 --- a/dist/Time-HiRes/Changes +++ b/dist/Time-HiRes/Changes @@ -1,9 +1,34 @@ Revision history for the Perl extension Time::HiRes. -1.9743 +1.9746 [2017-08-17] + - Unreliable t/usleep.t and t/utime.t tests [rt.cpan.org #122819] + Avoid testing for $dt = $t2 - $t1 and assuming $dt is less than + some value since a heavily loaded machine can delay the $t2. + Testing for greater than is fine. + - Tweak the configuring messages about subsecond stat/utime. + +1.9745 [2017-08-14] + - Properly check for futimens/utimensat actually doing something. + This should handle 'gnukfreebsd' (which has only stubs, so far + we have been skipping the test) and as a new thing 'gnu' (Hurd) + (also only stubs). Thanks to Nigel Horne. + - Scan in t/utime.t whether the filesystem (wherever File::Temp + puts it tempfiles) supports subsecond timestamps. This removes + the fragile Linux/ext3 specific hack. As a side effect, the + setting of subsecond timestamps is tested only if reading of + them is supported. Thanks to Carsten Gaebler for the test idea, + and Ryan Voots for testing. + +1.9744 [2017-07-27] + - add more potential clock constants, like CLOCK_MONOTONIC_FAST + (available in FreeBSD), and not all potentially found clock + constants were properly exported to be available from Perl, + see your system's clock_gettime() documentation for the available ones + +1.9743 [2017-07-20] - correct declared minimum Perl version (should be 5.6, was declared - as 5.8 since 1.9727_03) - - fix the fix for 'do file' to load hints in Makefile.PL + as 5.8 since 1.9727_03): blead af94b3ac + - fix the fix for 'do file' to load hints in Makefile.PL: blead 3172fdbc 1.9742 [2017-04-16] - prefer 3-argument open: blead 1ae6ead9 diff --git a/dist/Time-HiRes/HiRes.pm b/dist/Time-HiRes/HiRes.pm index fbdc2b4aca..db6afb6879 100644 --- a/dist/Time-HiRes/HiRes.pm +++ b/dist/Time-HiRes/HiRes.pm @@ -9,18 +9,39 @@ require DynaLoader; our @ISA = qw(Exporter DynaLoader); our @EXPORT = qw( ); +# More or less this same list is in Makefile.PL. Should unify. our @EXPORT_OK = qw (usleep sleep ualarm alarm gettimeofday time tv_interval getitimer setitimer nanosleep clock_gettime clock_getres clock clock_nanosleep - CLOCK_BOOTTIME CLOCK_HIGHRES - CLOCK_MONOTONIC CLOCK_MONOTONIC_COARSE - CLOCK_MONOTONIC_PRECISE CLOCK_MONOTONIC_RAW + CLOCKS_PER_SEC + CLOCK_BOOTTIME + CLOCK_HIGHRES + CLOCK_MONOTONIC + CLOCK_MONOTONIC_COARSE + CLOCK_MONOTONIC_FAST + CLOCK_MONOTONIC_PRECISE + CLOCK_MONOTONIC_RAW CLOCK_PROCESS_CPUTIME_ID - CLOCK_REALTIME CLOCK_REALTIME_COARSE - CLOCK_REALTIME_FAST CLOCK_REALTIME_PRECISE - CLOCK_SECOND CLOCK_SOFTTIME CLOCK_THREAD_CPUTIME_ID - CLOCK_TIMEOFDAY CLOCKS_PER_SEC - ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF ITIMER_REALPROF + CLOCK_PROF + CLOCK_REALTIME + CLOCK_REALTIME_COARSE + CLOCK_REALTIME_FAST + CLOCK_REALTIME_PRECISE + CLOCK_REALTIME_RAW + CLOCK_SECOND + CLOCK_SOFTTIME + CLOCK_THREAD_CPUTIME_ID + CLOCK_TIMEOFDAY + CLOCK_UPTIME + CLOCK_UPTIME_COARSE + CLOCK_UPTIME_FAST + CLOCK_UPTIME_PRECISE + CLOCK_UPTIME_RAW + CLOCK_VIRTUAL + ITIMER_PROF + ITIMER_REAL + ITIMER_REALPROF + ITIMER_VIRTUAL TIMER_ABSTIME d_usleep d_ualarm d_gettimeofday d_getitimer d_setitimer d_nanosleep d_clock_gettime d_clock_getres d_hires_utime @@ -28,7 +49,7 @@ our @EXPORT_OK = qw (usleep sleep ualarm alarm gettimeofday time tv_interval stat lstat utime ); -our $VERSION = '1.9743'; +our $VERSION = '1.9746'; our $XS_VERSION = $VERSION; $VERSION = eval $VERSION; diff --git a/dist/Time-HiRes/Makefile.PL b/dist/Time-HiRes/Makefile.PL index 54f5cb43dd..e7ce9245ef 100644 --- a/dist/Time-HiRes/Makefile.PL +++ b/dist/Time-HiRes/Makefile.PL @@ -367,10 +367,14 @@ sub has_futimens { #include <sys/stat.h> int main(int argc, char** argv) { - int ret; - struct timespec ts[2]; - ret = futimens(0, ts); - ret == 0 ? exit(0) : exit(errno ? errno : -1); + int ret1, ret2; + struct timespec ts1[2], ts2[2]; + ret1 = futimens(0, ts1); + char buf[1]; + read(0, buf, 0); /* Assuming reading nothing updates atime (the [0]) */ + ret2 = futimens(0, ts2); + ret1 == 0 && ret2 == 0 && (ts1[0].tv_nsec != 0 || ts2[0].tv_nsec != 0) ? + exit(0) : exit(errno ? errno : -1); } EOM } @@ -385,10 +389,16 @@ sub has_utimensat{ #include <fcntl.h> int main(int argc, char** argv) { - int ret; - struct timespec ts[2]; - ret = utimensat(AT_FDCWD, 0, ts, 0); - ret == 0 ? exit(0) : exit(errno ? errno : -1); + int ret1, ret2; + struct timespec ts1[2], ts2[2]; + /* We make the brave but probably foolish assumption that systems + * modern enough to have utimensat also have the /dev/stdin. */ + ret1 = utimensat(AT_FDCWD, "/dev/stdin", ts1, 0); + char buf[1]; + read(0, buf, 0); /* Assuming reading nothing updates atime (the [0]) */ + ret2 = utimensat(AT_FDCWD, "/dev/stdin", ts2, 0); + ret1 == 0 && ret2 == 0 && (ts1[0].tv_nsec != 0 || ts2[0].tv_nsec != 0) ? + exit(0) : exit(errno ? errno : -1); } EOM } @@ -507,7 +517,7 @@ EOD if ($has_setitimer && $has_getitimer) { print "You have interval timers (both setitimer and getitimer).\n"; } else { - print "You do not have interval timers.\n"; + print "You do NOT have interval timers.\n"; } print "Looking for ualarm()... "; @@ -695,7 +705,7 @@ EOD print "NOT found.\n"; } - print "Looking for futimens()... "; + print "Looking for working futimens()... "; my $has_futimens; if (has_futimens()) { $has_futimens++; @@ -708,7 +718,7 @@ EOD print "NOT found.\n"; } - print "Looking for utimensat()... "; + print "Looking for working utimensat()... "; my $has_utimensat; if (has_utimensat()) { $has_utimensat++; @@ -721,8 +731,12 @@ EOD print "NOT found.\n"; } - if ($has_futimens or $has_utimensat) { + my $has_hires_utime = ($has_futimens || $has_utimensat); + if ($has_hires_utime) { $DEFINE .= ' -DTIME_HIRES_UTIME'; + print "You seem to have subsecond timestamp setting.\n"; + } else { + print "You do NOT seem to have subsecond timestamp setting.\n"; } print "Looking for stat() subsecond timestamps...\n"; @@ -838,14 +852,18 @@ EOM DEFINE('TIME_HIRES_STAT', 4); } elsif ($has_stat_st_uxtime) { DEFINE('TIME_HIRES_STAT', 5); - } + } - if ($DEFINE =~ /-DTIME_HIRES_STAT=\d+/) { - print "You seem to have stat() subsecond timestamps.\n"; - print "(Your struct stat has them, but the filesystems must help.)\n"; - } else { - print "You do not seem to have stat subsecond timestamps.\n"; - } + my $has_hires_stat = ($DEFINE =~ /-DTIME_HIRES_STAT=(\d+)/) ? $1 : 0; + if ($has_hires_stat) { + print "You seem to have subsecond timestamp reading.\n"; + print "(Your struct stat has them, but the filesystems must help.)\n"; + unless ($has_hires_utime) { + print "However, you do NOT seem to have subsecond timestamp setting.\n"; + } + } else { + print "You do NOT seem to have subsecond timestamp reading.\n"; + } my $has_w32api_windows_h; @@ -948,31 +966,38 @@ sub doMakefile { sub doConstants { if (eval {require ExtUtils::Constant; 1}) { + # More or less this same list is in HiRes.pm. Should unify. my @names = qw( - CLOCKS_PER_SEC - CLOCK_BOOTTIME - CLOCK_HIGHRES - CLOCK_MONOTONIC - CLOCK_MONOTONIC_COARSE - CLOCK_MONOTONIC_PRECISE - CLOCK_MONOTONIC_RAW - CLOCK_PROCESS_CPUTIME_ID - CLOCK_REALTIME - CLOCK_REALTIME_COARSE - CLOCK_REALTIME_FAST - CLOCK_REALTIME_PRECISE - CLOCK_SECOND - CLOCK_SOFTTIME - CLOCK_THREAD_CPUTIME_ID - CLOCK_TIMEOFDAY - CLOCK_UPTIME - CLOCK_UPTIME_FAST - CLOCK_UPTIME_PRECISE - ITIMER_PROF - ITIMER_REAL - ITIMER_REALPROF - ITIMER_VIRTUAL - TIMER_ABSTIME + CLOCKS_PER_SEC + CLOCK_BOOTTIME + CLOCK_HIGHRES + CLOCK_MONOTONIC + CLOCK_MONOTONIC_COARSE + CLOCK_MONOTONIC_FAST + CLOCK_MONOTONIC_PRECISE + CLOCK_MONOTONIC_RAW + CLOCK_PROF + CLOCK_PROCESS_CPUTIME_ID + CLOCK_REALTIME + CLOCK_REALTIME_COARSE + CLOCK_REALTIME_FAST + CLOCK_REALTIME_PRECISE + CLOCK_REALTIME_RAW + CLOCK_SECOND + CLOCK_SOFTTIME + CLOCK_THREAD_CPUTIME_ID + CLOCK_TIMEOFDAY + CLOCK_UPTIME + CLOCK_UPTIME_COARSE + CLOCK_UPTIME_FAST + CLOCK_UPTIME_PRECISE + CLOCK_UPTIME_RAW + CLOCK_VIRTUAL + ITIMER_PROF + ITIMER_REAL + ITIMER_REALPROF + ITIMER_VIRTUAL + TIMER_ABSTIME ); foreach (qw (d_usleep d_ualarm d_gettimeofday d_getitimer d_setitimer d_nanosleep d_clock_gettime d_clock_getres @@ -982,15 +1007,14 @@ sub doConstants { if ($macro =~ /^(d_nanosleep|d_clock)$/) { $macro =~ s/^d_(.+)/TIME_HIRES_\U$1/; } elsif ($macro =~ /^(d_hires_stat)$/) { - my $d_hires_stat = 0; - $d_hires_stat = $1 if ($DEFINE =~ /-DTIME_HIRES_STAT=(\d+)/); + my $d_hires_stat = $1 if ($DEFINE =~ /-DTIME_HIRES_STAT=(\d+)/); push @names, {name => $_, macro => "TIME_HIRES_STAT", value => $d_hires_stat, default => ["IV", "0"]}; next; } elsif ($macro =~ /^(d_hires_utime)$/) { my $d_hires_utime = - ($DEFINE =~ /-DHAS_FUTIMENS/ || - $DEFINE =~ /-DHAS_UTIMENSAT/) ? 1 : 0; + ($DEFINE =~ /-DHAS_FUTIMENS/ || + $DEFINE =~ /-DHAS_UTIMENSAT/); push @names, {name => $_, macro => "TIME_HIRES_UTIME", value => $d_hires_utime, default => ["IV", "0"]}; next; diff --git a/dist/Time-HiRes/t/usleep.t b/dist/Time-HiRes/t/usleep.t index 9322458b80..bb66cbe62c 100644 --- a/dist/Time-HiRes/t/usleep.t +++ b/dist/Time-HiRes/t/usleep.t @@ -32,7 +32,7 @@ SKIP: { Time::HiRes::usleep(500_000); my $f2 = Time::HiRes::time(); my $d = $f2 - $f; - ok $d > 0.4 && $d < 0.9 or print("# slept $d secs $f to $f2\n"); + ok $d > 0.49 or print("# slept $d secs $f to $f2\n"); } SKIP: { @@ -40,7 +40,7 @@ SKIP: { my $r = [ Time::HiRes::gettimeofday() ]; Time::HiRes::sleep( 0.5 ); my $f = Time::HiRes::tv_interval $r; - ok $f > 0.4 && $f < 0.9 or print("# slept $f instead of 0.5 secs.\n"); + ok $f > 0.49 or print("# slept $f instead of 0.5 secs.\n"); } SKIP: { diff --git a/dist/Time-HiRes/t/utime.t b/dist/Time-HiRes/t/utime.t index 22fd48e703..7821837f8e 100644 --- a/dist/Time-HiRes/t/utime.t +++ b/dist/Time-HiRes/t/utime.t @@ -1,5 +1,32 @@ use strict; +sub has_subsecond_file_times { + require File::Temp; + require Time::HiRes; + my ($fh, $filename) = File::Temp::tempfile( "Time-HiRes-utime-XXXXXXXXX" ); + use File::Basename qw[dirname]; + my $dirname = dirname($filename); + require Cwd; + $dirname = &Cwd::getcwd if $dirname eq '.'; + print(STDERR "\n# Testing for subsecond file timestamps (mtime) in $dirname\n"); + close $fh; + my @mtimes; + for (1..2) { + open $fh, '>', $filename; + print $fh "foo"; + close $fh; + push @mtimes, (Time::HiRes::stat($filename))[9]; + Time::HiRes::sleep(.1) if $_ == 1; + } + my $delta = $mtimes[1] - $mtimes[0]; + # print STDERR "mtimes = @mtimes, delta = $delta\n"; + unlink $filename; + my $ok = $delta > 0 && $delta < 1; + printf(STDERR "# Subsecond file timestamps in $dirname: %s\n", + $ok ? "OK" : "NO"); + return $ok; +} + BEGIN { require Time::HiRes; require Test::More; @@ -7,43 +34,19 @@ BEGIN { unless(&Time::HiRes::d_hires_utime) { Test::More::plan(skip_all => "no hires_utime"); } + unless(&Time::HiRes::d_hires_stat) { + # Being able to read subsecond timestamps is a reasonable + # prerequisite for being able to write them. + Test::More::plan(skip_all => "no hires_stat"); + } unless (&Time::HiRes::d_futimens) { Test::More::plan(skip_all => "no futimens()"); } unless (&Time::HiRes::d_utimensat) { Test::More::plan(skip_all => "no utimensat()"); } - if ($^O eq 'gnukfreebsd') { - Test::More::plan(skip_all => "futimens() and utimensat() not working in $^O"); - } - if ($^O eq 'linux' && -e '/proc/mounts') { - # The linux might be wrong when ext3 - # is available in other operating systems, - # but then we need other methods for detecting - # the filesystem type of the tempfiles. - my ($fh, $fn) = File::Temp::tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1); - sub getfstype { - my ($fn) = @_; - my $cmd = "df $fn"; - open(my $df, '-|', $cmd) or die "$cmd: $!"; - my @df = <$df>; # Assume $df[0] is header line. - my $dev = +(split(" ", $df[1]))[0]; - open(my $mounts, '<', '/proc/mounts') or die "/proc/mounts: $!"; - while (<$mounts>) { - my @m = split(" "); - if ($m[0] eq $dev) { return $m[2] } - } - return; - } - my $fstype = getfstype($fn); - unless (defined $fstype) { - warn "Unknown fstype for $fn\n"; - } else { - print "# fstype = $fstype\n"; - if ($fstype eq 'ext3' || $fstype eq 'ext2') { - Test::More::plan(skip_all => "fstype $fstype has no subsecond timestamps in $^O"); - } - } + unless (has_subsecond_file_times()) { + Test::More::plan(skip_all => "No subsecond file timestamps"); } } @@ -106,17 +109,18 @@ print "# utime undef sets time to now\n"; my ($fh2, $filename2) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); my $now = Time::HiRes::time; + sleep(1); is Time::HiRes::utime(undef, undef, $filename1, $fh2), 2, "Two files changed"; { my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh1) )[8, 9]; - cmp_ok abs( $got_atime - $now), '<', 0.1, "File 1 atime set correctly"; - cmp_ok abs( $got_mtime - $now), '<', 0.1, "File 1 mtime set correctly"; + cmp_ok $got_atime, '>=', $now, "File 1 atime set correctly"; + cmp_ok $got_mtime, '>=', $now, "File 1 mtime set correctly"; } { my ($got_atime, $got_mtime) = ( Time::HiRes::stat($filename2) )[8, 9]; - cmp_ok abs( $got_atime - $now), '<', 0.1, "File 2 atime set correctly"; - cmp_ok abs( $got_mtime - $now), '<', 0.1, "File 2 mtime set correctly"; + cmp_ok $got_atime, '>=', $now, "File 2 atime set correctly"; + cmp_ok $got_mtime, '>=', $now, "File 2 mtime set correctly"; } }; -- Perl5 Master Repository