Symlink timestamp preservation code uses functions from unix-2.7.0 when available, which should be more portable.
This commit is contained in:
parent
15d7709031
commit
268800d590
2 changed files with 25 additions and 3 deletions
|
@ -5,7 +5,7 @@
|
||||||
- License: BSD-2-clause
|
- License: BSD-2-clause
|
||||||
-}
|
-}
|
||||||
|
|
||||||
{-# LANGUAGE ForeignFunctionInterface #-}
|
{-# LANGUAGE ForeignFunctionInterface, CPP #-}
|
||||||
|
|
||||||
module Utility.Touch (
|
module Utility.Touch (
|
||||||
TimeSpec(..),
|
TimeSpec(..),
|
||||||
|
@ -13,6 +13,26 @@ module Utility.Touch (
|
||||||
touch
|
touch
|
||||||
) where
|
) 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/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
@ -35,8 +55,6 @@ import Foreign.C
|
||||||
|
|
||||||
newtype TimeSpec = TimeSpec CTime
|
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 ()
|
touchBoth :: FilePath -> TimeSpec -> TimeSpec -> Bool -> IO ()
|
||||||
|
|
||||||
touch :: FilePath -> TimeSpec -> Bool -> IO ()
|
touch :: FilePath -> TimeSpec -> Bool -> IO ()
|
||||||
|
@ -123,3 +141,5 @@ touchBoth file atime mtime follow =
|
||||||
touchBoth _ _ _ _ = return ()
|
touchBoth _ _ _ _ = return ()
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
2
debian/changelog
vendored
2
debian/changelog
vendored
|
@ -1,6 +1,8 @@
|
||||||
git-annex (5.20151020) UNRELEASED; urgency=medium
|
git-annex (5.20151020) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
* Use statvfs on OSX.
|
* 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
|
-- Joey Hess <id@joeyh.name> Mon, 19 Oct 2015 17:00:21 -0400
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue