module Distribution.Sandbox.Utils where import System.Directory (doesFileExist) import System.FilePath (()) import Data.Maybe (mapMaybe, listToMaybe) import Codex.Internal findSandbox :: FilePath -> IO (Maybe FilePath) findSandbox prjDir = do fileExists <- doesFileExist configFile if fileExists then readSandboxDir else return Nothing where readSandboxDir = do fileContent <- readFile configFile return $ removePrefixMany $ lines fileContent configFile = prjDir "cabal.sandbox.config" removePrefixMany = maybeFunctionMany $ removePrefix "prefix:" maybeFunctionMany :: (a -> Maybe b) -> [a] -> Maybe b maybeFunctionMany func list = listToMaybe $ mapMaybe func list readSandboxSources :: FilePath -> IO [FilePath] readSandboxSources sandboxPath = do fileExists <- doesFileExist sourcesFile if fileExists then readSources else return [] where readSources = do fileContent <- readFile sourcesFile return $ projects fileContent where projects :: String -> [FilePath] projects x = sources x >>= (\x' -> fmap fst $ snd x') sources :: String -> [(String, [(FilePath, Int)])] sources x = read x sourcesFile = sandboxPath "add-source-timestamps"