Symlink timestamp preservation code uses functions from unix-2.7.0 when available, which should be more portable.

This commit is contained in:
Joey Hess 2015-10-21 02:22:18 -04:00
parent 15d7709031
commit 268800d590
Failed to extract signature
2 changed files with 25 additions and 3 deletions

View file

@ -5,7 +5,7 @@
- License: BSD-2-clause
-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE ForeignFunctionInterface, CPP #-}
module Utility.Touch (
TimeSpec(..),
@ -13,6 +13,26 @@ module Utility.Touch (
touch
) where
#if MIN_VERSION_unix(2,7,0)
import System.Posix.Files
import System.Posix.Types
newtype TimeSpec = TimeSpec EpochTime
{- Changes the access and modification times of an existing file.
Can follow symlinks, or not. Throws IO error on failure. -}
touchBoth :: FilePath -> TimeSpec -> TimeSpec -> Bool -> IO ()
touchBoth file (TimeSpec atime) (TimeSpec mtime) follow
| follow = setFileTimes file atime mtime
| otherwise = setSymbolicLinkTimesHiRes file (realToFrac atime) (realToFrac mtime)
touch :: FilePath -> TimeSpec -> Bool -> IO ()
touch file mtime = touchBoth file mtime mtime
#else
{- Compatability interface for old version of unix, to be removed eventally. -}
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
@ -35,8 +55,6 @@ import Foreign.C
newtype TimeSpec = TimeSpec CTime
{- Changes the access and modification times of an existing file.
Can follow symlinks, or not. Throws IO error on failure. -}
touchBoth :: FilePath -> TimeSpec -> TimeSpec -> Bool -> IO ()
touch :: FilePath -> TimeSpec -> Bool -> IO ()
@ -123,3 +141,5 @@ touchBoth file atime mtime follow =
touchBoth _ _ _ _ = return ()
#endif
#endif
#endif

2
debian/changelog vendored
View file

@ -1,6 +1,8 @@
git-annex (5.20151020) UNRELEASED; urgency=medium
* Use statvfs on OSX.
* Symlink timestamp preservation code uses functions
from unix-2.7.0 when available, which should be more portable.
-- Joey Hess <id@joeyh.name> Mon, 19 Oct 2015 17:00:21 -0400