diff options
author | Joey Hess <joey@kitenet.net> | 2014-07-27 00:30:04 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2014-07-27 00:30:04 -0400 |
commit | c46eba94f69151ded37988efd7e3375d327faef3 (patch) | |
tree | 90d69a2eecde684e1010e99604055df1741e5acf /Remote/Directory.hs | |
parent | 07eb1e676829a20cb7bcc73a219f51b76daa4b3f (diff) |
better Preparer interface
This will allow things like WebDAV to opean a single persistent connection
and reuse it for all the chunked data.
The crazy types allow for some nice code reuse.
Diffstat (limited to 'Remote/Directory.hs')
-rw-r--r-- | Remote/Directory.hs | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/Remote/Directory.hs b/Remote/Directory.hs index 2ebf608cb..cb7553fe2 100644 --- a/Remote/Directory.hs +++ b/Remote/Directory.hs @@ -6,6 +6,7 @@ -} {-# LANGUAGE CPP #-} +{-# LANGUAGE Rank2Types #-} module Remote.Directory (remote) where @@ -106,11 +107,10 @@ tmpDir d k = addTrailingPathSeparator $ d </> "tmp" </> keyFile k {- Check if there is enough free disk space in the remote's directory to - store the key. Note that the unencrypted key size is checked. -} -prepareStore :: FilePath -> ChunkConfig -> PrepareStorer -prepareStore d chunkconfig k = ifM (checkDiskSpace (Just d) k 0) - ( return $ Just (store d chunkconfig) - , return Nothing - ) +prepareStore :: FilePath -> ChunkConfig -> Preparer Storer +prepareStore d chunkconfig = checkPrepare + (\k -> checkDiskSpace (Just d) k 0) + (store d chunkconfig) store :: FilePath -> ChunkConfig -> Storer store d chunkconfig k b p = do @@ -135,9 +135,9 @@ store d chunkconfig k b p = do mapM_ preventWrite =<< dirContents dest preventWrite dest -retrieve :: FilePath -> ChunkConfig -> PrepareRetriever -retrieve d (LegacyChunks _) basek = Legacy.retrieve locations d basek -retrieve d _ _ = return $ Just $ \k -> L.readFile =<< getLocation d k +retrieve :: FilePath -> ChunkConfig -> Preparer Retriever +retrieve d (LegacyChunks _) = Legacy.retrieve locations d +retrieve d _ = simplyPrepare $ \k -> L.readFile =<< getLocation d k retrieveCheap :: FilePath -> ChunkConfig -> Key -> FilePath -> Annex Bool -- no cheap retrieval possible for chunks |