66module Stack.Build.Cache
77 ( tryGetBuildCache
88 , tryGetConfigCache
9+ , tryGetCabalMod
910 , getPackageFileModTimes
1011 , getInstalledExes
1112 , buildCacheTimes
@@ -15,6 +16,7 @@ module Stack.Build.Cache
1516 , writeFlagCache
1617 , writeBuildCache
1718 , writeConfigCache
19+ , writeCabalMod
1820 ) where
1921
2022import Control.Exception.Enclosed (handleIO , tryIO )
@@ -25,16 +27,12 @@ import Control.Monad.Logger (MonadLogger)
2527import Control.Monad.Reader
2628import Data.Binary (Binary )
2729import qualified Data.Binary as Binary
28- import Data.ByteString (ByteString )
2930import qualified Data.ByteString as S
3031import qualified Data.ByteString.Lazy as L
3132import Data.Map (Map )
3233import qualified Data.Map as Map
3334import Data.Maybe (catMaybes , mapMaybe )
34- import Data.Set (Set )
3535import qualified Data.Set as Set
36- import Data.Text (Text )
37- import Data.Text.Encoding (encodeUtf8 )
3836import GHC.Generics (Generic )
3937import Path
4038import Path.IO
@@ -93,6 +91,11 @@ tryGetConfigCache :: (MonadIO m, MonadReader env m, HasConfig env, MonadThrow m,
9391 => Path Abs Dir -> m (Maybe ConfigCache )
9492tryGetConfigCache = tryGetCache configCacheFile
9593
94+ -- | Try to read the mod time of the cabal file from the last build
95+ tryGetCabalMod :: (MonadIO m , MonadReader env m , HasConfig env , MonadThrow m , MonadLogger m , HasEnvConfig env )
96+ => Path Abs Dir -> m (Maybe ModTime )
97+ tryGetCabalMod = tryGetCache configCabalMod
98+
9699-- | Try to load a cache.
97100tryGetCache :: (MonadIO m , Binary a , MonadReader env m , HasConfig env , MonadThrow m , MonadLogger m , HasEnvConfig env )
98101 => (Path Abs Dir -> m (Path Abs File ))
@@ -124,32 +127,25 @@ writeBuildCache dir times =
124127-- | Write the dirtiness cache for this package's configuration.
125128writeConfigCache :: (MonadIO m , MonadReader env m , HasConfig env , MonadThrow m , MonadLogger m , HasEnvConfig env )
126129 => Path Abs Dir
127- -> [Text ]
128- -> Set GhcPkgId -- ^ dependencies
129- -> Path Abs file
130- -> TaskType
130+ -> ConfigCache
131131 -> m ()
132- writeConfigCache dir opts deps cabalfp ttype =
133- do now <- liftIO (getModificationTime (toFilePath cabalfp))
134- let cache = ConfigCache
135- { configCacheOpts = map encodeUtf8 opts
136- , configCacheDeps = deps
137- , configCabalFileModTime =
138- case ttype of
139- TTLocal lp _ | lpWanted lp -> Just (modTime now)
140- _ -> Nothing
141- }
142- writeCache
143- dir
144- configCacheFile
145- cache
132+ writeConfigCache dir = writeCache dir configCacheFile
133+
134+ -- | See 'tryGetCabalMod'
135+ writeCabalMod :: (MonadIO m , MonadReader env m , HasConfig env , MonadThrow m , MonadLogger m , HasEnvConfig env )
136+ => Path Abs Dir
137+ -> ModTime
138+ -> m ()
139+ writeCabalMod dir = writeCache dir configCabalMod
146140
147141-- | Delete the caches for the project.
148142deleteCaches :: (MonadIO m , MonadReader env m , HasConfig env , MonadLogger m , MonadThrow m , HasEnvConfig env )
149143 => Path Abs Dir -> m ()
150144deleteCaches dir = do
145+ {- FIXME confirm that this is acceptable to remove
151146 bfp <- buildCacheFile dir
152147 removeFileIfExists bfp
148+ -}
153149 cfp <- configCacheFile dir
154150 removeFileIfExists cfp
155151
@@ -167,16 +163,19 @@ writeCache dir get' content = do
167163 (Binary. encode content))
168164
169165flagCacheFile :: (MonadIO m , MonadThrow m , MonadReader env m , HasBuildConfig env )
170- => GhcPkgId
166+ => Installed
171167 -> m (Path Abs File )
172- flagCacheFile gid = do
173- rel <- parseRelFile $ ghcPkgIdString gid
168+ flagCacheFile installed = do
169+ rel <- parseRelFile $
170+ case installed of
171+ Library gid -> ghcPkgIdString gid
172+ Executable ident -> packageIdentifierString ident
174173 dir <- flagCacheLocal
175174 return $ dir </> rel
176175
177176-- | Loads the flag cache for the given installed extra-deps
178177tryGetFlagCache :: (MonadIO m , MonadThrow m , MonadReader env m , HasBuildConfig env )
179- => GhcPkgId
178+ => Installed
180179 -> m (Maybe ConfigCache )
181180tryGetFlagCache gid = do
182181 file <- flagCacheFile gid
@@ -186,22 +185,11 @@ tryGetFlagCache gid = do
186185 _ -> return Nothing
187186
188187writeFlagCache :: (MonadIO m , MonadReader env m , HasBuildConfig env , MonadThrow m )
189- => GhcPkgId
190- -> [ByteString ]
191- -> Set GhcPkgId
192- -> Path Abs File
193- -> TaskType
188+ => Installed
189+ -> ConfigCache
194190 -> m ()
195- writeFlagCache gid flags deps cabalfp ttype = do
191+ writeFlagCache gid cache = do
196192 file <- flagCacheFile gid
197- now <- liftIO $ getModificationTime (toFilePath cabalfp)
198- let cache = ConfigCache
199- { configCacheOpts = flags
200- , configCacheDeps = deps
201- , configCabalFileModTime = case ttype of
202- TTLocal lp _ | lpWanted lp -> Just (modTime now)
203- _ -> Nothing
204- }
205193 liftIO $ do
206194 createDirectoryIfMissing True $ toFilePath $ parent file
207195
0 commit comments