From 3a57bd4d5e78d639b78eed9fcc27028720f8d326 Mon Sep 17 00:00:00 2001 From: James E Keenan Date: Sun, 25 Sep 2016 19:48:52 -0400 Subject: [PATCH] Time-HiRes: bring up-to-date with CPAN. The ext3/ext2 filesystems do not have subsecond resolution, therefore skip the t/utime.t test. [rt.cpan.org #116127] --- dist/Time-HiRes/Changes | 5 +++++ dist/Time-HiRes/HiRes.pm | 2 +- dist/Time-HiRes/t/utime.t | 43 ++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/dist/Time-HiRes/Changes b/dist/Time-HiRes/Changes index d54fda8..e21623b 100644 --- a/dist/Time-HiRes/Changes +++ b/dist/Time-HiRes/Changes @@ -1,5 +1,10 @@ Revision history for the Perl extension Time::HiRes. +1.9740 [2016-09-25] + - the ext3/ext2 filesystems do not have subsecond resolution, + therefore skip the t/utime.t test + [rt.cpan.org #116127] + 1.9739 [2016-06-28] - the upcoming macOS 10.12 (Sierra, the operating system formerly known as OS X, or Darwin) has implemented the clock_gettime() diff --git a/dist/Time-HiRes/HiRes.pm b/dist/Time-HiRes/HiRes.pm index 2071e5e..a4c5002 100644 --- a/dist/Time-HiRes/HiRes.pm +++ b/dist/Time-HiRes/HiRes.pm @@ -28,7 +28,7 @@ our @EXPORT_OK = qw (usleep sleep ualarm alarm gettimeofday time tv_interval stat lstat utime ); -our $VERSION = '1.9739'; +our $VERSION = '1.9740'; our $XS_VERSION = $VERSION; $VERSION = eval $VERSION; diff --git a/dist/Time-HiRes/t/utime.t b/dist/Time-HiRes/t/utime.t index ede2e78..795252e 100644 --- a/dist/Time-HiRes/t/utime.t +++ b/dist/Time-HiRes/t/utime.t @@ -3,6 +3,7 @@ use strict; BEGIN { require Time::HiRes; require Test::More; + require File::Temp; unless(&Time::HiRes::d_hires_utime) { Test::More::plan(skip_all => "no hires_utime"); } @@ -15,6 +16,35 @@ BEGIN { 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(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"); + } + } + } } use Test::More tests => 18; @@ -23,9 +53,16 @@ use File::Temp qw( tempfile ); use Config; -# Cygwin timestamps have less precision. -my $atime = $^O eq 'cygwin' ? 1.1111111 : 1.111111111; -my $mtime = $^O eq 'cygwin' ? 2.2222222 : 2.222222222; +# Hope initially for nanosecond accuracy. +my $atime = 1.111111111; +my $mtime = 2.222222222; + +if ($^O eq 'cygwin') { + # Cygwin timestamps have less precision. + $atime = 1.1111111; + $mtime = 2.2222222; +} +print "# \$^O = $^O, atime = $atime, mtime = $mtime\n"; print "# utime \$fh\n"; { -- 2.7.4