Hadrian: Delete target symlink in createFileLinkUntracked
authorBen Gamari <ben@smart-cactus.org>
Mon, 3 Jun 2019 22:24:17 +0000 (18:24 -0400)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Fri, 7 Jun 2019 14:24:38 +0000 (10:24 -0400)
Previously createFileLinkUntracked would fail if the symlink already
existed.

hadrian/src/Hadrian/Utilities.hs

index e8bf793..a1386e6 100644 (file)
@@ -34,6 +34,7 @@ module Hadrian.Utilities (
     Dynamic, fromDynamic, toDyn, TypeRep, typeOf
     ) where
 
+import Control.Applicative
 import Control.Monad.Extra
 import Data.Char
 import Data.Dynamic (Dynamic, fromDynamic, toDyn)
@@ -296,7 +297,9 @@ createFileLinkUntracked linkTarget link = do
     let dir = takeDirectory link
     liftIO $ IO.createDirectoryIfMissing True dir
     putProgressInfo =<< renderCreateFileLink linkTarget link
-    quietly . liftIO $ IO.createFileLink linkTarget link
+    quietly . liftIO $ do
+        IO.removeFile link <|> return ()
+        IO.createFileLink linkTarget link
 
 -- | Link a file tracking the link target. Create the target directory if
 -- missing.