summaryrefslogtreecommitdiff
path: root/Utility/Directory.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Utility/Directory.hs')
-rw-r--r--Utility/Directory.hs14
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