@@ -33,8 +33,7 @@ import Control.Monad.Catch (MonadThrow, catch, throwM)
3333import Control.Monad.IO.Class
3434import Control.Monad.Logger (MonadLogger )
3535import Control.Monad.Reader
36- import Data.Binary (Binary )
37- import qualified Data.Binary as Binary
36+ import Data.Binary.VersionTagged
3837import qualified Data.ByteString as S
3938import qualified Data.ByteString.Lazy as L
4039import Data.Map (Map )
@@ -90,6 +89,8 @@ data BuildCache = BuildCache
9089 }
9190 deriving (Generic )
9291instance Binary BuildCache
92+ instance NFData BuildCache where
93+ rnf = genericRnf
9394
9495-- | Try to read the dirtiness cache for the given package directory.
9596tryGetBuildCache :: (MonadIO m , MonadReader env m , HasConfig env , MonadThrow m , MonadLogger m , HasEnvConfig env )
@@ -107,21 +108,11 @@ tryGetCabalMod :: (MonadIO m, MonadReader env m, HasConfig env, MonadThrow m, Mo
107108tryGetCabalMod = tryGetCache configCabalMod
108109
109110-- | Try to load a cache.
110- tryGetCache :: (MonadIO m , Binary a , MonadReader env m , HasConfig env , MonadThrow m , MonadLogger m , HasEnvConfig env )
111+ tryGetCache :: (MonadIO m , Binary a , NFData a )
111112 => (Path Abs Dir -> m (Path Abs File ))
112113 -> Path Abs Dir
113114 -> m (Maybe a )
114- tryGetCache get' dir = do
115- fp <- get' dir
116- liftIO
117- (catch
118- (fmap (decodeMaybe . L. fromStrict) (S. readFile (toFilePath fp)))
119- (\ e -> if isDoesNotExistError e
120- then return Nothing
121- else throwM e))
122- where decodeMaybe =
123- either (const Nothing ) (Just . thd) . Binary. decodeOrFail
124- where thd (_,_,x) = x
115+ tryGetCache get' dir = get' dir >>= decodeFileOrFailDeep . toFilePath
125116
126117-- | Write the dirtiness cache for this package's files.
127118writeBuildCache :: (MonadIO m , MonadReader env m , HasConfig env , MonadThrow m , MonadLogger m , HasEnvConfig env )
@@ -160,17 +151,14 @@ deleteCaches dir = do
160151 removeFileIfExists cfp
161152
162153-- | Write to a cache.
163- writeCache :: (Binary a , MonadIO m , MonadLogger m , MonadThrow m , MonadReader env m , HasConfig env , HasEnvConfig env )
154+ writeCache :: (Binary a , MonadIO m )
164155 => Path Abs Dir
165156 -> (Path Abs Dir -> m (Path Abs File ))
166157 -> a
167158 -> m ()
168159writeCache dir get' content = do
169160 fp <- get' dir
170- liftIO
171- (L. writeFile
172- (toFilePath fp)
173- (Binary. encode content))
161+ liftIO $ encodeFile (toFilePath fp) content
174162
175163flagCacheFile :: (MonadIO m , MonadThrow m , MonadReader env m , HasEnvConfig env )
176164 => Installed
@@ -187,12 +175,8 @@ flagCacheFile installed = do
187175tryGetFlagCache :: (MonadIO m , MonadThrow m , MonadReader env m , HasEnvConfig env )
188176 => Installed
189177 -> m (Maybe ConfigCache )
190- tryGetFlagCache gid = do
191- file <- flagCacheFile gid
192- eres <- liftIO $ tryIO $ Binary. decodeFileOrFail $ toFilePath file
193- case eres of
194- Right (Right x) -> return $ Just x
195- _ -> return Nothing
178+ tryGetFlagCache gid =
179+ flagCacheFile gid >>= decodeFileOrFailDeep . toFilePath
196180
197181writeFlagCache :: (MonadIO m , MonadReader env m , HasEnvConfig env , MonadThrow m )
198182 => Installed
@@ -202,7 +186,7 @@ writeFlagCache gid cache = do
202186 file <- flagCacheFile gid
203187 liftIO $ do
204188 createTree (parent file)
205- Binary. encodeFile (toFilePath file) cache
189+ encodeFile (toFilePath file) cache
206190
207191-- | Mark a test suite as having succeeded
208192setTestSuccess :: (MonadIO m , MonadLogger m , MonadThrow m , MonadReader env m , HasConfig env , HasEnvConfig env )
0 commit comments