add getFileSize, which can get the real size of a large file on Windows
Avoid using fileSize which maxes out at just 2 gb on Windows. Instead, use hFileSize, which doesn't have a bounded size. Fixes support for files > 2 gb on Windows. Note that the InodeCache code only needs to compare a file size, so it doesn't matter it the file size wraps. So it has been left as-is. This was necessary both to avoid invalidating existing inode caches, and because the code passed FileStatus around and would have become more expensive if it called getFileSize. This commit was sponsored by Christian Dietrich.
This commit is contained in:
parent
87c4f0e320
commit
4f657aa14e
22 changed files with 94 additions and 36 deletions
|
@ -68,8 +68,7 @@ hashNameE hash = hashName hash ++ "E"
|
|||
keyValue :: Hash -> KeySource -> Annex (Maybe Key)
|
||||
keyValue hash source = do
|
||||
let file = contentLocation source
|
||||
stat <- liftIO $ getFileStatus file
|
||||
let filesize = fromIntegral $ fileSize stat
|
||||
filesize <- liftIO $ getFileSize file
|
||||
s <- hashFile hash file filesize
|
||||
return $ Just $ stubKey
|
||||
{ keyName = s
|
||||
|
@ -103,7 +102,7 @@ checkKeyChecksum hash key file = do
|
|||
mstat <- liftIO $ catchMaybeIO $ getFileStatus file
|
||||
case (mstat, fast) of
|
||||
(Just stat, False) -> do
|
||||
let filesize = fromIntegral $ fileSize stat
|
||||
filesize <- liftIO $ getFileSize' file stat
|
||||
showSideAction "checksum"
|
||||
check <$> hashFile hash file filesize
|
||||
_ -> return True
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue