diff options
Diffstat (limited to 'utils/ghc-pkg')
-rw-r--r-- | utils/ghc-pkg/Main.hs | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/utils/ghc-pkg/Main.hs b/utils/ghc-pkg/Main.hs index bdd9c80893..697816eb09 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 ----------------------------------------------------------------------------- |