From 1dd4574909b40ffdb77ae1338b353156d73983af Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 12 May 2013 19:19:28 -0400 Subject: rename module --- Utility/Directory.hs | 2 +- Utility/TempFile.hs | 71 ---------------------------------------------------- Utility/Tmp.hs | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Utility/WebApp.hs | 2 +- 4 files changed, 73 insertions(+), 73 deletions(-) delete mode 100644 Utility/TempFile.hs create mode 100644 Utility/Tmp.hs (limited to 'Utility') diff --git a/Utility/Directory.hs b/Utility/Directory.hs index 599d41a03..9477ad5b9 100644 --- a/Utility/Directory.hs +++ b/Utility/Directory.hs @@ -18,7 +18,7 @@ import Control.Applicative import System.IO.Unsafe (unsafeInterleaveIO) import Utility.SafeCommand -import Utility.TempFile +import Utility.Tmp import Utility.Exception import Utility.Monad diff --git a/Utility/TempFile.hs b/Utility/TempFile.hs deleted file mode 100644 index 58d07c3a2..000000000 --- a/Utility/TempFile.hs +++ /dev/null @@ -1,71 +0,0 @@ -{- temp file functions - - - - Copyright 2010-2013 Joey Hess - - - - Licensed under the GNU GPL version 3 or higher. - -} - -module Utility.TempFile where - -import Control.Exception (bracket) -import System.IO -import System.Directory -import Control.Monad.IfElse - -import Utility.Exception -import System.FilePath - -type Template = String - -{- Runs an action like writeFile, writing to a temp file first and - - then moving it into place. The temp file is stored in the same - - directory as the final file to avoid cross-device renames. -} -viaTmp :: (FilePath -> String -> IO ()) -> FilePath -> String -> IO () -viaTmp a file content = do - let (dir, base) = splitFileName file - createDirectoryIfMissing True dir - (tmpfile, handle) <- openTempFile dir (base ++ ".tmp") - hClose handle - a tmpfile content - renameFile tmpfile file - -{- Runs an action with a tmp file located in the system's tmp directory - - (or in "." if there is none) then removes the file. -} -withTempFile :: Template -> (FilePath -> Handle -> IO a) -> IO a -withTempFile template a = do - tmpdir <- catchDefaultIO "." getTemporaryDirectory - withTempFileIn tmpdir template a - -{- Runs an action with a tmp file located in the specified directory, - - then removes the file. -} -withTempFileIn :: FilePath -> Template -> (FilePath -> Handle -> IO a) -> IO a -withTempFileIn tmpdir template a = bracket create remove use - where - create = openTempFile tmpdir template - remove (name, handle) = do - hClose handle - catchBoolIO (removeFile name >> return True) - use (name, handle) = a name handle - -{- Runs an action with a tmp directory located within the system's tmp - - directory (or within "." if there is none), then removes the tmp - - directory and all its contents. -} -withTempDir :: Template -> (FilePath -> IO a) -> IO a -withTempDir template a = do - tmpdir <- catchDefaultIO "." getTemporaryDirectory - withTempDirIn tmpdir template a - -{- Runs an action with a tmp directory located within a specified directory, - - then removes the tmp directory and all its contents. -} -withTempDirIn :: FilePath -> Template -> (FilePath -> IO a) -> IO a -withTempDirIn tmpdir template = bracket create remove - where - remove d = whenM (doesDirectoryExist d) $ - removeDirectoryRecursive d - create = do - createDirectoryIfMissing True tmpdir - makenewdir (tmpdir template) (0 :: Int) - makenewdir t n = do - let dir = t ++ "." ++ show n - either (const $ makenewdir t $ n + 1) (const $ return dir) - =<< tryIO (createDirectory dir) diff --git a/Utility/Tmp.hs b/Utility/Tmp.hs new file mode 100644 index 000000000..f03e4c0dc --- /dev/null +++ b/Utility/Tmp.hs @@ -0,0 +1,71 @@ +{- Temporary files and directories. + - + - Copyright 2010-2013 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Utility.Tmp where + +import Control.Exception (bracket) +import System.IO +import System.Directory +import Control.Monad.IfElse + +import Utility.Exception +import System.FilePath + +type Template = String + +{- Runs an action like writeFile, writing to a temp file first and + - then moving it into place. The temp file is stored in the same + - directory as the final file to avoid cross-device renames. -} +viaTmp :: (FilePath -> String -> IO ()) -> FilePath -> String -> IO () +viaTmp a file content = do + let (dir, base) = splitFileName file + createDirectoryIfMissing True dir + (tmpfile, handle) <- openTempFile dir (base ++ ".tmp") + hClose handle + a tmpfile content + renameFile tmpfile file + +{- Runs an action with a tmp file located in the system's tmp directory + - (or in "." if there is none) then removes the file. -} +withTmpFile :: Template -> (FilePath -> Handle -> IO a) -> IO a +withTmpFile template a = do + tmpdir <- catchDefaultIO "." getTemporaryDirectory + withTmpFileIn tmpdir template a + +{- Runs an action with a tmp file located in the specified directory, + - then removes the file. -} +withTmpFileIn :: FilePath -> Template -> (FilePath -> Handle -> IO a) -> IO a +withTmpFileIn tmpdir template a = bracket create remove use + where + create = openTempFile tmpdir template + remove (name, handle) = do + hClose handle + catchBoolIO (removeFile name >> return True) + use (name, handle) = a name handle + +{- Runs an action with a tmp directory located within the system's tmp + - directory (or within "." if there is none), then removes the tmp + - directory and all its contents. -} +withTmpDir :: Template -> (FilePath -> IO a) -> IO a +withTmpDir template a = do + tmpdir <- catchDefaultIO "." getTemporaryDirectory + withTmpDirIn tmpdir template a + +{- Runs an action with a tmp directory located within a specified directory, + - then removes the tmp directory and all its contents. -} +withTmpDirIn :: FilePath -> Template -> (FilePath -> IO a) -> IO a +withTmpDirIn tmpdir template = bracket create remove + where + remove d = whenM (doesDirectoryExist d) $ + removeDirectoryRecursive d + create = do + createDirectoryIfMissing True tmpdir + makenewdir (tmpdir template) (0 :: Int) + makenewdir t n = do + let dir = t ++ "." ++ show n + either (const $ makenewdir t $ n + 1) (const $ return dir) + =<< tryIO (createDirectory dir) diff --git a/Utility/WebApp.hs b/Utility/WebApp.hs index 0614384a1..762819b2f 100644 --- a/Utility/WebApp.hs +++ b/Utility/WebApp.hs @@ -10,7 +10,7 @@ module Utility.WebApp where import Common -import Utility.TempFile +import Utility.Tmp import Utility.FileMode import qualified Yesod -- cgit v1.2.3