summaryrefslogtreecommitdiff
path: root/Remote/Helper/Chunked.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2014-07-24 16:42:35 -0400
committerGravatar Joey Hess <joey@kitenet.net>2014-07-24 16:42:35 -0400
commit477243a87dd07ac8282745c482708205c5fa474f (patch)
tree8b3155b20a916755a0ff91b1037d067a3dfa174b /Remote/Helper/Chunked.hs
parent2b414feaf2d20452794d0cdd608c6dd91feb1ec1 (diff)
move meteredWriteFileChunks out of legacy
Diffstat (limited to 'Remote/Helper/Chunked.hs')
-rw-r--r--Remote/Helper/Chunked.hs19
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