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:
parent
467b77fd3b
commit
068aaf943b
6 changed files with 15 additions and 16 deletions
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue