mirror of
https://github.com/joshuaclayton/unused.git
synced 2024-08-16 08:10:55 +03:00
Remove race conditions checking file existence before reading
This commit is contained in:
parent
d9efa11777
commit
752a3b23b9
@ -5,11 +5,13 @@ module Unused.Cache
|
||||
|
||||
import Control.Monad.IO.Class (liftIO)
|
||||
import Control.Monad.Trans.Reader
|
||||
import System.Directory
|
||||
import Data.Csv (FromRecord, ToRecord, HasHeader(..), encode, decode)
|
||||
import Data.Vector (toList)
|
||||
import System.Directory (createDirectoryIfMissing)
|
||||
import qualified Data.ByteString.Lazy as BS
|
||||
import qualified Data.ByteString.Lazy.Char8 as C
|
||||
import Unused.Cache.DirectoryFingerprint
|
||||
import Unused.Util (safeReadFile)
|
||||
|
||||
newtype CacheFileName = CacheFileName String
|
||||
type Cache = ReaderT CacheFileName IO
|
||||
@ -31,11 +33,11 @@ writeCache contents = do
|
||||
readCache :: FromRecord a => Cache (Maybe [a])
|
||||
readCache = do
|
||||
(CacheFileName fileName) <- ask
|
||||
exists <- liftIO $ doesFileExist fileName
|
||||
|
||||
if exists
|
||||
then fmap processCsv (decode NoHeader <$> liftIO (BS.readFile fileName))
|
||||
else return Nothing
|
||||
either
|
||||
(const Nothing)
|
||||
(processCsv . decode NoHeader . C.pack)
|
||||
<$> (liftIO $ safeReadFile fileName)
|
||||
where
|
||||
processCsv = either (const Nothing) (Just . toList)
|
||||
|
||||
|
@ -4,12 +4,11 @@ module Unused.ResultsClassifier.Config
|
||||
) where
|
||||
|
||||
import qualified Data.Yaml as Y
|
||||
import qualified Data.ByteString as BS
|
||||
import qualified Data.ByteString.Char8 as C
|
||||
import qualified Data.Either as E
|
||||
import qualified Data.Bifunctor as B
|
||||
import System.FilePath ((</>))
|
||||
import System.Directory (getHomeDirectory, doesFileExist)
|
||||
import System.Directory (getHomeDirectory)
|
||||
import Paths_unused (getDataFileName)
|
||||
import Unused.ResultsClassifier.Types (LanguageConfiguration, ParseConfigError(..))
|
||||
import Unused.Util (safeReadFile)
|
||||
@ -17,11 +16,11 @@ import Unused.Util (safeReadFile)
|
||||
loadConfig :: IO (Either String [LanguageConfiguration])
|
||||
loadConfig = do
|
||||
configFileName <- getDataFileName ("data" </> "config.yml")
|
||||
exists <- doesFileExist configFileName
|
||||
|
||||
if exists
|
||||
then Y.decodeEither <$> BS.readFile configFileName
|
||||
else return $ Left "default config not found"
|
||||
either
|
||||
(const $ Left "default config not found")
|
||||
(Y.decodeEither . C.pack)
|
||||
<$> safeReadFile configFileName
|
||||
|
||||
loadAllConfigurations :: IO (Either [ParseConfigError] [LanguageConfiguration])
|
||||
loadAllConfigurations = do
|
||||
|
Loading…
Reference in New Issue
Block a user