Opened 3 years ago

Closed 3 years ago

#6160 closed feature request (fixed)

support sub-second resolutions for file timestamps

Reported by: redneb Owned by:
Priority: normal Milestone: 7.6.1
Component: libraries/unix Version: 7.4.2
Keywords: Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Test Case:
Blocked By: Blocking:
Related Tickets: Differential Revisions:

Description

Currently all file timestamps related functions (accessTime, modificationTime, statusChangeTime, setFileTimes) offer resolution of one second. Most modern posix systems support better resolutions for file timestamps.

Attachments (2)

Change History (12)

comment:1 Changed 3 years ago by redneb

The above patch introduces 3 new functions:

accessTimeHiRes       :: FileStatus -> POSIXTime
modificationTimeHiRes :: FileStatus -> POSIXTime
statusChangeTimeHiRes :: FileStatus -> POSIXTime

When I have time I will send a patch for setFileTimes.

comment:2 Changed 3 years ago by igloo

  • difficulty set to Unknown
  • Status changed from new to patch

comment:3 Changed 3 years ago by simonmar

I see no reason not to have this, except that it introduces a dependency from unix on time (one might expect the dependency to go the other way, because time needs access to POSIX interfaces to get the current time for example, but time does its own FFI).

Any objections, or shall we just apply it?

comment:4 Changed 3 years ago by simonpj

  • Owner set to pcapriotti

comment:5 Changed 3 years ago by pcapriotti

  • Milestone set to 7.6.1
  • Resolution set to fixed
  • Status changed from patch to closed

Applied, thanks.

commit 9acb33c819356a49068ec041c38e438d335e9781
Author: Marios Titas <[email protected]>
Date:   Wed Jun 13 02:52:03 2012 -0400

    Extract high resolution timestamps from FileStatus
    
    Signed-off-by: Paolo Capriotti <[email protected]>

comment:6 Changed 3 years ago by redneb

  • Owner pcapriotti deleted
  • Resolution fixed deleted
  • Status changed from closed to new

I am reopening this to post the second part of what I promised earlier, ie operations for changing file timestamps.
The above patch introduces 5 new functions:

setFileTimesHiRes :: FilePath -> POSIXTime -> POSIXTime -> IO ()
setFdTimesHiRes :: Fd -> POSIXTime -> POSIXTime -> IO ()
setSymbolicLinkTimesHiRes :: FilePath -> POSIXTime -> POSIXTime -> IO ()
touchFd :: Fd -> IO ()
touchSymbolicLink :: FilePath -> IO ()

This should complete the file timestamp related operations.

comment:7 Changed 3 years ago by pcapriotti

  • Status changed from new to patch

comment:8 Changed 3 years ago by simonmar

I think it would be good to note in the documentation for these functions that they are not POSIX and therefore might not be available on all platforms, and that they might thrown an error if the platform does not support the underlying API.

comment:9 Changed 3 years ago by redneb

I updated the patch so that the documentation includes a note that some of these functions are not supported on all platforms.

By the way, there is a similar issue with the already existing setSymbolicLinkOwnerAndGroup function: currently it is exported by System.Posix.Files only on platforms that support this operation. I think it should be exported everywhere and raise an exception on platforms that do not support it.

comment:10 Changed 3 years ago by pcapriotti

  • Resolution set to fixed
  • Status changed from patch to closed

Thank you for the patch. Applied as:

commit 62e07b8a423a78556e2f5d86d1affe7cca4c8896
Author: Marios Titas <[email protected]>
Date:   Sun Aug 12 15:46:22 2012 -0400

    Add functions for setting file times with high resolution
Note: See TracTickets for help on using tickets.