safeio 0.0.2.0 → 0.0.3.0
raw patch · 5 files changed
+36/−11 lines, 5 filesdep ~base
Dependency ranges changed: base
Files
- ChangeLog +3/−0
- Data/Conduit/SafeWrite.hs +2/−2
- System/IO/SafeWrite.hs +2/−2
- System/IO/SafeWrite/Tests.hs +25/−2
- safeio.cabal +4/−5
ChangeLog view
@@ -1,3 +1,6 @@+Version 0.0.3.0 2017-07-29 by luispedro+ * Fix issue with creating files in separate directories+ Version 0.0.2.0 2017-05-30 by luispedro * Add conduit version
Data/Conduit/SafeWrite.hs view
@@ -6,7 +6,7 @@ import qualified Data.Conduit.Combinators as CC import qualified Data.ByteString as B import Data.IORef (newIORef, writeIORef, readIORef)-import System.FilePath (takeDirectory)+import System.FilePath (takeDirectory, takeBaseName) import System.IO (hClose, openTempFile) import System.Directory (renameFile, removeFile) import Control.Monad (unless)@@ -28,7 +28,7 @@ writeMove where acquire = do- (tname, th) <- openTempFile (takeDirectory finalname) finalname+ (tname, th) <- openTempFile (takeDirectory finalname) (takeBaseName finalname) completed <- newIORef False return (tname, th, completed) writeMove (tname, th, completed) = do
System/IO/SafeWrite.hs view
@@ -3,7 +3,7 @@ , syncFile ) where -import System.FilePath (takeDirectory)+import System.FilePath (takeDirectory, takeBaseName) import System.Posix.IO (openFd, defaultFileFlags, closeFd, OpenMode(..)) import System.Posix.Unistd (fileSynchronise) import Control.Exception (bracket, onException)@@ -38,7 +38,7 @@ -> (Handle -> IO a) -- ^ action to execute -> IO a withOutputFile finalname act = do- (tname, th) <- openTempFile (takeDirectory finalname) finalname+ (tname, th) <- openTempFile (takeDirectory finalname) (takeBaseName finalname) (do r <- act th hClose th
System/IO/SafeWrite/Tests.hs view
@@ -11,7 +11,7 @@ import Control.Monad.IO.Class (liftIO) import Control.Exception (throwIO) import System.IO.Error (isDoesNotExistError, catchIOError)-import System.Directory (doesFileExist, removeFile)+import System.Directory (doesFileExist, removeFile, createDirectory, removeDirectory) import System.IO (hPutStrLn) import System.IO.SafeWrite@@ -45,12 +45,23 @@ case_no_intermediate_output = do withOutputFile outname $ \h -> do- hPutStrLn h "Hello Worlld"+ hPutStrLn h "Hello World" partial <- doesFileExist outname assertBool "Partial file should not exist before internal action ends" (not partial) (doesFileExist outname) >>= assertBool "Output file was not created" removeFile outname ++case_in_subdirectory = do+ let subdir = "subdirectory_for_testing"+ ofname = subdir ++ "/file.txt"++ createDirectory subdir+ withOutputFile ofname $ flip hPutStrLn "Hello World"+ (doesFileExist ofname) >>= assertBool "Output file was not created"+ removeFile ofname+ removeDirectory subdir+ case_conduit_create_output = do C.runConduitRes $ C.yield "Hello World" .| safeSinkFile outname@@ -76,3 +87,15 @@ ) .| safeSinkFile outname (doesFileExist outname) >>= assertBool "Output file was not created at the end of conduit processing" removeFile outname++case_conduit_in_subdirectory = do+ let subdir = "subdirectory_for_testing"+ ofname = subdir ++ "/file.txt"++ createDirectory subdir+ C.runConduitRes $+ C.yield "Hello World" .| safeSinkFile ofname+ (doesFileExist ofname) >>= assertBool "Output file was not created"+ removeFile ofname+ removeDirectory subdir+
safeio.cabal view
@@ -1,8 +1,8 @@ name: safeio-version: 0.0.2.0+version: 0.0.3.0 synopsis: Write output to disk atomically description: This package implements utilities to perform atomic output- so as to avoid the problem of partial intermediate files.+ so as to avoid the problem of partial intermediate files. category: IO author: Luis Pedro Coelho maintainer: Luis Pedro Coelho@@ -19,7 +19,7 @@ Data.Conduit.SafeWrite ghc-options: -Wall build-depends:- base > 4 && < 5,+ base > 4.8 && < 5, bytestring, conduit >= 1.0, conduit-combinators,@@ -36,8 +36,7 @@ ghc-options: -Wall hs-source-dirs: . build-depends:- base > 4 && < 5,- base > 4 && < 5,+ base > 4.8 && < 5, bytestring, conduit >= 1.0, conduit-combinators,