diff options
Diffstat (limited to 'Utility/Directory.hs')
-rw-r--r-- | Utility/Directory.hs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/Utility/Directory.hs b/Utility/Directory.hs index e6622d31e..3041361df 100644 --- a/Utility/Directory.hs +++ b/Utility/Directory.hs @@ -15,11 +15,14 @@ import Control.Monad import Control.Monad.IfElse import System.FilePath import Control.Applicative +import Control.Exception (bracket_) +import System.Posix.Directory import Utility.SafeCommand import Utility.TempFile import Utility.Exception import Utility.Monad +import Utility.Path {- Lists the contents of a directory. - Unlike getDirectoryContents, paths are not relative to the directory. -} @@ -60,3 +63,14 @@ moveFile src dest = tryIO (rename src dest) >>= onrename case r of (Left _) -> return False (Right s) -> return $ isDirectory s + +{- Runs an action in another directory. -} +bracketCd :: FilePath -> IO a -> IO a +bracketCd dir a = go =<< getCurrentDirectory + where + go cwd + | dirContains dir cwd = a + | otherwise = bracket_ + (changeWorkingDirectory dir) + (changeWorkingDirectory cwd) + a |