diff options
Diffstat (limited to 'Remote/Helper/Chunked.hs')
-rw-r--r-- | Remote/Helper/Chunked.hs | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/Remote/Helper/Chunked.hs b/Remote/Helper/Chunked.hs index edd9dd8c9..031ff63d6 100644 --- a/Remote/Helper/Chunked.hs +++ b/Remote/Helper/Chunked.hs @@ -5,14 +5,21 @@ - Licensed under the GNU GPL version 3 or higher. -} -module Remote.Helper.Chunked where +module Remote.Helper.Chunked + ( ChunkSize + , ChunkConfig(..) + , chunkConfig + , meteredWriteFileChunks + ) where +import Common.Annex import Utility.DataUnits import Types.Remote import Logs.Chunk.Pure (ChunkSize) +import Utility.Metered +import qualified Data.ByteString.Lazy as L import qualified Data.Map as M -import Data.Int data ChunkConfig = NoChunks @@ -30,3 +37,11 @@ chunkConfig m = readsz v f = case readSize dataUnits v of Just size | size > 0 -> fromInteger size _ -> error ("bad " ++ f) + +{- Writes a series of chunks to a file. The feeder is called to get + - each chunk. -} +meteredWriteFileChunks :: MeterUpdate -> FilePath -> [v] -> (v -> IO L.ByteString) -> IO () +meteredWriteFileChunks meterupdate dest chunks feeder = + withBinaryFile dest WriteMode $ \h -> + forM_ chunks $ + meteredWrite meterupdate h <=< feeder |