From: Simon Marlow Date: Fri, 14 Dec 2007 12:33:45 +0000 (+0000) Subject: always try to remove the new file before restoring the old one (#1963) X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=32b906efc4c6474d8af6fd7be2a3ddac2ae20a16;hp=18b15542d69770ca761e0663fde6c6fa52fdb129 always try to remove the new file before restoring the old one (#1963) --- diff --git a/utils/ghc-pkg/Main.hs b/utils/ghc-pkg/Main.hs index bdd9c80..697816e 100644 --- a/utils/ghc-pkg/Main.hs +++ b/utils/ghc-pkg/Main.hs @@ -693,17 +693,16 @@ savingOldConfig filename io = Exception.block $ do `Exception.catch` \e -> do hPutStr stdout ("WARNING: an error was encountered while writing " ++ "the new configuration.\n") - if restore_on_error - then do + -- remove any partially complete new version: + try (removeFile filename) + -- and attempt to restore the old one, if we had one: + when restore_on_error $ do hPutStr stdout "Attempting to restore the old configuration... " do renameFile oldFile filename hPutStrLn stdout "done." `catch` \err -> hPutStrLn stdout ("Failed: " ++ show err) - else do - -- file did not exist before, so the new one which - -- might be partially complete. - try (removeFile filename) - return () + -- Note the above renameFile sometimes fails on Windows with + -- "permission denied", I have no idea why --SDM. Exception.throwIO e -----------------------------------------------------------------------------