coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [coreutils] [PATCH 1/2] stat: support printing birthtime


From: Pádraig Brady
Subject: Re: [coreutils] [PATCH 1/2] stat: support printing birthtime
Date: Mon, 04 Oct 2010 10:53:56 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.8) Gecko/20100227 Thunderbird/3.0.3

On 01/10/10 15:34, Eric Blake wrote:
> diff --git c/tests/misc/stat-birthtime i/tests/misc/stat-birthtime
> new file mode 100755
> index 0000000..d4f372e
> --- /dev/null
> +++ i/tests/misc/stat-birthtime
> @@ -0,0 +1,46 @@
> +#!/bin/sh
> +# ensure that stat attempts birthtime access
> +
> +# Copyright (C) 2010 Free Software Foundation, Inc.
> +
> +# This program is free software: you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation, either version 3 of the License, or
> +# (at your option) any later version.
> +
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +if test "$VERBOSE" = yes; then
> +  set -x
> +  stat --version
> +fi
> +
> +. $srcdir/test-lib.sh
> +
> +# Whether birthtime is supported or not, it better not change even when
> +# [acm]time are modified.  :)
> +touch a || fail=1
> +btime=$(stat --format %W a) || fail=1
> +atime=$(stat --format %X a) || fail=1
> +mtime=$(stat --format %Y a) || fail=1
> +ctime=$(stat --format %Z a) || fail=1
> +
> +case $(stat --format %x a) in
> +  *.000000000*) sleep 2;; # worst case file system is FAT
> +  *) # FIXME: sleep .1 would be sufficient if %X showed nanoseconds
> + sleep 1;; # should be adequate for any system with subsecond resolution
> +esac
> +
> +touch a || fail=1
> +test "x$btime" = x$(stat --format %W a) || fail=1
> +test "x$atime" != x$(stat --format %X a) || fail=1
> +test "x$mtime" != x$(stat --format %Y a) || fail=1
> +test "x$ctime" != x$(stat --format %Z a) || fail=1
> +
> +Exit $fail

Note the above test fits the pattern of "requiring a delay to pass"
and so can use the retry_delay_ functionality used elsewhere.
The advantage is that the delay is 1s rather than 2 on
1s resolution file systems like ext3.

diff --git a/tests/misc/stat-birthtime b/tests/misc/stat-birthtime
index 4490ee8..e584df0 100755
--- a/tests/misc/stat-birthtime
+++ b/tests/misc/stat-birthtime
@@ -27,15 +27,25 @@ atime=$(stat --format %X a) || fail=1
 mtime=$(stat --format %Y a) || fail=1
 ctime=$(stat --format %Z a) || fail=1

-case $(stat --format %x a) in
-  *.000000000*) sleep 2;; # worst case file system is FAT
-  *) sleep .02;; # should be adequate for any system with subsecond resolution
-esac
-
-touch a || fail=1
-test "x$btime" = x$(stat --format %W a) || fail=1
-test "x$atime" != x$(stat --format %X a) || fail=1
-test "x$mtime" != x$(stat --format %Y a) || fail=1
-test "x$ctime" != x$(stat --format %Z a) || fail=1
+# Wait up to 2.17s for timestamps to change.
+# ----------------------------------------
+# iterations   file system resolution  e.g.
+# ----------------------------------------
+# 1            nano or micro second    ext4
+# 4            1 second                ext3
+# 5            2 second                FAT
+# ----------------------------------------
+check_timestamps_updated()
+{
+  local delay="$1"
+  sleep $delay
+  touch a || fail=1
+
+  test "x$btime" = x$(stat --format %W a) &&
+  test "x$atime" != x$(stat --format %X a) &&
+  test "x$mtime" != x$(stat --format %Y a) &&
+  test "x$ctime" != x$(stat --format %Z a)
+}
+retry_delay_ check_timestamps_updated .07 5 || fail=1



reply via email to

[Prev in Thread] Current Thread [Next in Thread]