From 268800d590ccaa0452defbdc05c4a4a0cbb3411f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 21 Oct 2015 02:22:18 -0400 Subject: [PATCH] Symlink timestamp preservation code uses functions from unix-2.7.0 when available, which should be more portable. --- Utility/Touch.hsc | 26 +++++++++++++++++++++++--- debian/changelog | 2 ++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/Utility/Touch.hsc b/Utility/Touch.hsc index c3318e6da3..e1b1e887e9 100644 --- a/Utility/Touch.hsc +++ b/Utility/Touch.hsc @@ -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 #include #include @@ -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 diff --git a/debian/changelog b/debian/changelog index 9d768ad28c..2892424298 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 Mon, 19 Oct 2015 17:00:21 -0400