summaryrefslogtreecommitdiff
path: root/utils/ghc-pkg
diff options
context:
space:
mode:
authorich@christoph-bauer.net <unknown>2010-07-25 16:26:06 +0000
committerich@christoph-bauer.net <unknown>2010-07-25 16:26:06 +0000
commit7e25751e8ba0704e23fcf6fff1c23af3ac5af696 (patch)
tree0b06f6472f4f54187f3dca37dfcb35a304eee8b2 /utils/ghc-pkg
parentccc1989726c3f4b94cf18f6a13aba2b5d339d077 (diff)
downloadhaskell-7e25751e8ba0704e23fcf6fff1c23af3ac5af696.tar.gz
ghc-pkg: don't fail, if a file is already removed
Diffstat (limited to 'utils/ghc-pkg')
-rw-r--r--utils/ghc-pkg/Main.hs14
1 files changed, 10 insertions, 4 deletions
diff --git a/utils/ghc-pkg/Main.hs b/utils/ghc-pkg/Main.hs
index 940e4043a4..bb836f08cb 100644
--- a/utils/ghc-pkg/Main.hs
+++ b/utils/ghc-pkg/Main.hs
@@ -38,7 +38,7 @@ import System.Directory ( doesDirectoryExist, getDirectoryContents,
import System.Exit ( exitWith, ExitCode(..) )
import System.Environment ( getArgs, getProgName, getEnv )
import System.IO
-import System.IO.Error (try)
+import System.IO.Error (try, isDoesNotExistError)
import Data.List
import Control.Concurrent
@@ -719,7 +719,7 @@ changeDBDir verbosity cmds db = do
do_cmd (RemovePackage p) = do
let file = location db </> display (installedPackageId p) <.> "conf"
when (verbosity > Normal) $ putStrLn ("removing " ++ file)
- removeFile file
+ removeFileSafe file
do_cmd (AddPackage p) = do
let file = location db </> display (installedPackageId p) <.> "conf"
when (verbosity > Normal) $ putStrLn ("writing " ++ file)
@@ -1584,7 +1584,7 @@ withFileAtomic targetFile write_content = do
`catchIO` \err -> do
exists <- doesFileExist targetFile
if exists
- then do removeFile targetFile
+ then do removeFileSafe targetFile
-- Big fat hairy race condition
renameFile newFile targetFile
-- If the removeFile succeeds and the renameFile fails
@@ -1594,7 +1594,7 @@ withFileAtomic targetFile write_content = do
renameFile newFile targetFile
#endif
`Exception.onException` do hClose newHandle
- removeFile newFile
+ removeFileSafe newFile
where
template = targetName <.> "tmp"
targetDir | null targetDir_ = "."
@@ -1693,3 +1693,9 @@ readUTF8File file = do
hSetEncoding h utf8
#endif
hGetContents h
+
+-- removeFileSave doesn't throw an exceptions, if the file is already deleted
+removeFileSafe :: FilePath -> IO ()
+removeFileSafe fn =
+ removeFile fn `catch` \ e ->
+ when (not $ isDoesNotExistError e) $ ioError e \ No newline at end of file