module DirUtils where
import Prelude hiding (catch,ioError)
import MUtils
import List(isSuffixOf,nub)
import AbstractIO
optCreateDirectory d = unlessM (doesDirectoryExist d) (createDirectory d)
getModificationTimeMaybe path = maybeM (getModificationTime path)
{-
do ifM (doesFileExist path)
(Just # getModificationTime path)
(return Nothing)
-}
-- GHC deficiency workaround:
getModificationTime' path = getModificationTime path `catch` handle
where
handle err = if isDoesNotExistError err
then fail $ "Missing: "++path
else ioError err
latestModTime paths = maximum # mapM getModificationTime' paths
-- Remove a directory and its contents:
rmR dir = system . unwords . ("rm -rf":) $ dir
-- Expand directory names to all the Haskell files (.hs & .lhs) in that
-- directory:
expand fs = concat # mapM expand1 (nub fs)
expand1 f =
do isdir <- doesDirectoryExist f
if isdir
then do fs <- getDirectoryContents f
return [f++"/"++f'|f'<-fs,haskellSuffix f']
else return [f]
haskellSuffix f = ".hs" `isSuffixOf` f || ".lhs" `isSuffixOf` f
{-
-- Recursively collect Haskell files from subdirectories:
recurse = recurse' "" . nub
recurse' path fs = concat # mapM (recurse1 path) fs
recurse1 path f =
do let path' = extend path f
isdir <- doesDirectoryExist path'
if isdir
then if okDir f
then do fs <- getDirectoryContents path'
recurse' path' [f|f<-fs,f `notElem` [".",".."]]
else return []
else if haskellSuffix f
then return [path']
else return []
okDir f = f `notElem` ["objs","CVS","hi","tests","old","spec"]
extend "" f = f
extend "." f = f
extend d f = d++"/"++f
-}