on second thought, InodeCache should use getFileSize

This is necessary for interop between inode caches created on unix and
windows. Which is more important than supporting inodecaches for large keys
with the wrong size, which are broken anyway.

There should be no slowdown from this change, except on Windows.
This commit is contained in:
Joey Hess 2015-01-20 19:35:50 -04:00
parent 467b77fd3b
commit 068aaf943b
6 changed files with 15 additions and 16 deletions

View file

@ -40,15 +40,12 @@ module Utility.InodeCache (
import Common
import System.PosixCompat.Types
import Utility.QuickCheck
-- While fileSize overflows and wraps at 2gb on Windows,
-- it's ok for purposes of comparison.
import System.PosixCompat.Files (fileSize)
#ifdef mingw32_HOST_OS
import Data.Word (Word64)
#endif
data InodeCachePrim = InodeCachePrim FileID FileOffset EpochTime
data InodeCachePrim = InodeCachePrim FileID Integer EpochTime
deriving (Show, Eq, Ord)
newtype InodeCache = InodeCache InodeCachePrim
@ -115,15 +112,16 @@ readInodeCache s = case words s of
genInodeCache :: FilePath -> TSDelta -> IO (Maybe InodeCache)
genInodeCache f delta = catchDefaultIO Nothing $
toInodeCache delta =<< getFileStatus f
toInodeCache delta f =<< getFileStatus f
toInodeCache :: TSDelta -> FileStatus -> IO (Maybe InodeCache)
toInodeCache (TSDelta getdelta) s
toInodeCache :: TSDelta -> FilePath -> FileStatus -> IO (Maybe InodeCache)
toInodeCache (TSDelta getdelta) f s
| isRegularFile s = do
delta <- getdelta
sz <- getFileSize' f s
return $ Just $ InodeCache $ InodeCachePrim
(fileID s)
(fileSize s)
sz
(modificationTime s + delta)
| otherwise = pure Nothing