cabal-db 0.1.1 → 0.1.2
raw patch · 2 files changed
+29/−4 lines, 2 files
Files
- Src/Main.hs +28/−3
- cabal-db.cabal +1/−1
Src/Main.hs view
@@ -23,10 +23,11 @@ import System.Directory import System.FilePath import qualified Data.ByteString.Lazy as L-import Data.ByteString.Lazy.UTF8 as UTF8+import qualified Data.ByteString.Lazy.UTF8 as UTF8 import qualified Data.Map as M import Data.List+import Data.Maybe platformPackages = map PackageName $ ["array"@@ -59,6 +60,30 @@ type Ver = String newtype AvailablePackages = AvailablePackages (M.Map PackageName [(String,L.ByteString)]) +-- | return cabal 00-index.tar filepath+readCabalConfig = do+ cfgEnv <- lookup "CABAL_CONFIG" <$> getEnvironment+ cabalAppDir <- getAppUserDataDirectory "cabal"+ let cabalAppConfig = cabalAppDir </> "config"+ let configFile = fromMaybe cabalAppConfig cfgEnv++ cfg <- parseConfig . preParse <$> readFile configFile+ case (lookup "remote-repo" cfg, lookup "remote-repo-cache" cfg) of+ (Just rrepo, Just rcache) ->+ let (name,_) = fromMaybe (error "cannot parse remote-repo") $ parseOneLine rrepo in+ return (rcache </> name </> "00-index.tar")+ _ -> error ("cannot find 'remote-repo' and 'remote-repo-cache' in config file " ++ configFile)+ where+ parseConfig = catMaybes . map parseOneLine+ preParse = filter (not . isPrefixOf " ") -- filter all spaces leading line+ . filter (not . isPrefixOf "--") -- filter comments out+ . filter (not . null) -- filter null line out+ . lines+ parseOneLine line = let (a,b) = break (== ':') line+ in if null b+ then Nothing+ else Just (a, dropWhile (== ' ') $ drop 1 b)+ unPackageName :: PackageName -> String unPackageName (PackageName n) = n @@ -91,8 +116,8 @@ loadAvailablePackages :: IO AvailablePackages loadAvailablePackages = do- cabalAppDir <- getAppUserDataDirectory "cabal"- let tarFile = cabalAppDir </> "packages" </> "hackage.haskell.org" </> "00-index.tar"+ tarFile <- readCabalConfig+ foldl' mkMap (AvailablePackages M.empty) . listTar . Tar.read <$> L.readFile tarFile where listTar :: Show e => Tar.Entries e -> [([FilePath],L.ByteString)]
cabal-db.cabal view
@@ -1,5 +1,5 @@ Name: cabal-db-Version: 0.1.1+Version: 0.1.2 Synopsis: cabal-db Description: cabal-db License: BSD3