diff --git a/yesod/ChangeLog.md b/yesod/ChangeLog.md index 2d558f7e..cede03f3 100644 --- a/yesod/ChangeLog.md +++ b/yesod/ChangeLog.md @@ -1,3 +1,7 @@ +## 1.4.3.1 + +* Handle exceptions while writing a file in `addStaticContentExternal` + ## 1.4.3 * Switch to `Data.Yaml.Config` diff --git a/yesod/Yesod/Default/Util.hs b/yesod/Yesod/Default/Util.hs index 488312ae..cf6f9cdc 100644 --- a/yesod/Yesod/Default/Util.hs +++ b/yesod/Yesod/Default/Util.hs @@ -18,6 +18,9 @@ import qualified Data.ByteString.Lazy as L import Data.Text (Text, pack, unpack) import Yesod.Core -- purposely using complete import so that Haddock will see addStaticContent import Control.Monad (when, unless) +import Control.Monad.Trans.Resource (runResourceT) +import Data.Conduit (($$)) +import Data.Conduit.Binary (sourceLbs, sinkFileCautious) import System.Directory (doesFileExist, createDirectoryIfMissing) import Language.Haskell.TH.Syntax import Text.Lucius (luciusFile, luciusFileReload) @@ -43,7 +46,8 @@ addStaticContentExternal addStaticContentExternal minify hash staticDir toRoute ext' _ content = do liftIO $ createDirectoryIfMissing True statictmp exists <- liftIO $ doesFileExist fn' - unless exists $ liftIO $ L.writeFile fn' content' + unless exists $ + liftIO $ runResourceT $ sourceLbs content' $$ sinkFileCautious fn' return $ Just $ Right (toRoute ["tmp", pack fn], []) where fn, statictmp, fn' :: FilePath diff --git a/yesod/yesod.cabal b/yesod/yesod.cabal index 55976c60..4e42fa08 100644 --- a/yesod/yesod.cabal +++ b/yesod/yesod.cabal @@ -1,5 +1,5 @@ name: yesod -version: 1.4.3 +version: 1.4.3.1 license: MIT license-file: LICENSE author: Michael Snoyman @@ -40,7 +40,9 @@ library , bytestring , monad-logger , fast-logger - , conduit-extra + , conduit + , conduit-extra >= 1.1.14 + , resourcet , shakespeare , streaming-commons , wai-logger