From 748609e54c6bc6ca9d6ac68da04b8dd430416876 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 26 Jul 2014 23:26:10 -0400 Subject: improve exception handling Push it down from needing to be done in every Storer, to being checked once inside ChunkedEncryptable. Also, catch exceptions from PrepareStorer and PrepareRetriever, just in case.. --- Remote/Helper/Chunked.hs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'Remote/Helper/Chunked.hs') diff --git a/Remote/Helper/Chunked.hs b/Remote/Helper/Chunked.hs index 5fa6c55ef..3eab0947a 100644 --- a/Remote/Helper/Chunked.hs +++ b/Remote/Helper/Chunked.hs @@ -70,12 +70,16 @@ numChunks = pred . fromJust . keyChunkNum . fst . nextChunkKeyStream - the storer action, along with a corresponding chunk key and a - progress meter update callback. - - - Note that the storer action is responsible for catching any - - exceptions it may encounter. - - - This action may be called on a chunked key. It will simply store it. -} -storeChunks :: UUID -> ChunkConfig -> Key -> FilePath -> MeterUpdate -> (Key -> L.ByteString -> MeterUpdate -> IO Bool) -> Annex Bool +storeChunks + :: UUID + -> ChunkConfig + -> Key + -> FilePath + -> MeterUpdate + -> (Key -> L.ByteString -> MeterUpdate -> IO Bool) + -> Annex Bool storeChunks u chunkconfig k f p storer = metered (Just p) k $ \meterupdate -> either (\e -> warning (show e) >> return False) (go meterupdate) =<< (liftIO $ tryIO $ L.readFile f) @@ -188,7 +192,7 @@ retrieveChunks -> Annex Bool retrieveChunks retriever u chunkconfig encryptor basek basep sink = do ls <- chunkKeys u chunkconfig basek - liftIO $ flip catchNonAsync giveup (firstavail ls) + liftIO $ firstavail ls `catchNonAsync` giveup where giveup e = do warningIO (show e) -- cgit v1.2.3