WashNGo-2.12: WASH/Utility/Auxiliary.hs
module WASH.Utility.Auxiliary where
import IO
import System
import Directory
import WASH.Utility.FileNames
import qualified WASH.Utility.Shell as Shell
protectedGetEnv :: String -> String -> IO String
protectedGetEnv var deflt =
catch (getEnv var) (const $ return deflt)
readFileNonExistent :: FilePath -> String -> IO String
readFileNonExistent fileName def =
do existent <- doesFileExist fileName
if existent then readFile fileName else return def
readFileStrictly :: FilePath -> IO String
readFileStrictly filePath =
do h <- openFile filePath ReadMode
contents <- hGetContents h
hClose (g contents h)
return contents
where
g [] h = h
g (_:rest) h = g rest h
assertDirectoryExists :: FilePath -> IO () -> IO ()
assertDirectoryExists dirname existsAction =
catch (createDirectory dirname)
(\ ioe ->
if isAlreadyExistsError ioe then existsAction
else if isDoesNotExistError ioe then
do assertDirectoryExists (dropLastComponent dirname) (return ())
assertDirectoryExists dirname existsAction
else do hPutStrLn stderr ("assertDirectoryExists " ++ show dirname)
ioError ioe)
writeDebugFile :: String -> String -> IO ()
writeDebugFile filename str =
do writeFile filename str
system ("chmod 666 " ++ Shell.quote filename)
return ()
appendDebugFile :: String -> String -> IO ()
appendDebugFile filename str =
do appendFile filename ('\n':str)
system ("chmod 666 " ++ Shell.quote filename)
return ()