Update for cabal-helper >= 0.6

This commit is contained in:
Daniel Gröber 2015-09-07 05:15:29 +02:00
parent 8fea4ac426
commit be293db503
2 changed files with 36 additions and 19 deletions

View File

@ -58,10 +58,8 @@ getGhcMergedPkgOptions :: (Applicative m, IOish m, Gm m)
getGhcMergedPkgOptions = chCached $ \distdir -> Cached { getGhcMergedPkgOptions = chCached $ \distdir -> Cached {
cacheLens = Just (lGmcMergedPkgOptions . lGmCaches), cacheLens = Just (lGmcMergedPkgOptions . lGmCaches),
cacheFile = mergedPkgOptsCacheFile distdir, cacheFile = mergedPkgOptsCacheFile distdir,
cachedAction = \ _tcf (progs, rootdir, _) _ma -> do cachedAction = \_tcf (_progs, _projdir, _ver) _ma -> do
readProc <- gmReadProcess opts <- withCabal $ runCHQuery ghcMergedPkgOptions
opts <- withCabal $ runQuery'' readProc progs rootdir distdir $
ghcMergedPkgOptions
return ([setupConfigPath distdir], opts) return ([setupConfigPath distdir], opts)
} }
@ -69,10 +67,10 @@ getCabalPackageDbStack :: (IOish m, Gm m) => m [GhcPkgDb]
getCabalPackageDbStack = chCached $ \distdir -> Cached { getCabalPackageDbStack = chCached $ \distdir -> Cached {
cacheLens = Just (lGmcPackageDbStack . lGmCaches), cacheLens = Just (lGmcPackageDbStack . lGmCaches),
cacheFile = pkgDbStackCacheFile distdir, cacheFile = pkgDbStackCacheFile distdir,
cachedAction = \ _tcf (progs, rootdir, _) _ma -> do cachedAction = \_tcf (_progs, _projdir, _ver) _ma -> do
crdl <- cradle crdl <- cradle
readProc <- gmReadProcess dbs <- withCabal $ map chPkgToGhcPkg <$>
dbs <- withCabal $ map chPkgToGhcPkg <$> runQuery'' readProc progs rootdir distdir packageDbStack runCHQuery packageDbStack
return ([setupConfigFile crdl, sandboxConfigFile crdl], dbs) return ([setupConfigFile crdl, sandboxConfigFile crdl], dbs)
} }
@ -91,9 +89,8 @@ getComponents :: (Applicative m, IOish m, Gm m)
getComponents = chCached$ \distdir -> Cached { getComponents = chCached$ \distdir -> Cached {
cacheLens = Just (lGmcComponents . lGmCaches), cacheLens = Just (lGmcComponents . lGmCaches),
cacheFile = cabalHelperCacheFile distdir, cacheFile = cabalHelperCacheFile distdir,
cachedAction = \ _tcf (progs, rootdir, _vers) _ma -> do cachedAction = \ _tcf (_progs, _projdir, _ver) _ma -> do
readProc <- gmReadProcess runCHQuery $ do
runQuery'' readProc progs rootdir distdir $ do
q <- join7 q <- join7
<$> ghcOptions <$> ghcOptions
<*> ghcPkgOptions <*> ghcPkgOptions
@ -115,6 +112,23 @@ getComponents = chCached$ \distdir -> Cached {
, (a', c) <- lc , (a', c) <- lc
, a == a' , a == a'
] ]
runCHQuery :: (IOish m, GmOut m, GmEnv m) => Query m b -> m b
runCHQuery a = do
crdl <- cradle
let projdir = cradleRootDir crdl
distdir = projdir </> cradleDistDir crdl
opts <- options
progs <- patchStackPrograms crdl (optPrograms opts)
readProc <- gmReadProcess
let qe = (defaultQueryEnv projdir distdir) {
qeReadProcess = readProc
, qePrograms = helperProgs progs
}
runQuery qe a
prepareCabalHelper :: (IOish m, GmEnv m, GmOut m, GmLog m) => m () prepareCabalHelper :: (IOish m, GmEnv m, GmOut m, GmLog m) => m ()
prepareCabalHelper = do prepareCabalHelper = do
@ -177,8 +191,11 @@ withCabal action = do
pkgDbStackOutOfSync <- pkgDbStackOutOfSync <-
case mCusPkgDbStack of case mCusPkgDbStack of
Just cusPkgDbStack -> do Just cusPkgDbStack -> do
pkgDb <- runQuery'' readProc (helperProgs $ optPrograms opts) projdir distdir $ let qe = (defaultQueryEnv projdir distdir) {
map chPkgToGhcPkg <$> packageDbStack qeReadProcess = readProc
, qePrograms = helperProgs $ optPrograms opts
}
pkgDb <- runQuery qe $ map chPkgToGhcPkg <$> packageDbStack
return $ pkgDb /= cusPkgDbStack return $ pkgDb /= cusPkgDbStack
Nothing -> return False Nothing -> return False
@ -289,19 +306,19 @@ helperProgs progs = CH.Programs {
chCached :: (Applicative m, IOish m, Gm m, Serialize a) chCached :: (Applicative m, IOish m, Gm m, Serialize a)
=> (FilePath -> Cached m GhcModState ChCacheData a) -> m a => (FilePath -> Cached m GhcModState ChCacheData a) -> m a
chCached c = do chCached c = do
root <- cradleRootDir <$> cradle projdir <- cradleRootDir <$> cradle
dist <- cradleDistDir <$> cradle distdir <- (projdir </>) . cradleDistDir <$> cradle
d <- cacheInputData root d <- cacheInputData projdir
withCabal $ cached root (c dist) d withCabal $ cached projdir (c distdir) d
where where
-- we don't need to include the disdir in the cache input because when it -- we don't need to include the disdir in the cache input because when it
-- changes the cache files will be gone anyways ;) -- changes the cache files will be gone anyways ;)
cacheInputData root = do cacheInputData projdir = do
opts <- options opts <- options
crdl <- cradle crdl <- cradle
progs' <- patchStackPrograms crdl (optPrograms opts) progs' <- patchStackPrograms crdl (optPrograms opts)
return $ ( helperProgs progs' return $ ( helperProgs progs'
, root , projdir
, (gmVer, chVer) , (gmVer, chVer)
) )

View File

@ -146,7 +146,7 @@ Library
, bytestring , bytestring
, cereal >= 0.4 , cereal >= 0.4
, containers , containers
, cabal-helper == 0.5.* && >= 0.5.1.0 , cabal-helper == 0.6.* && >= 0.6.0.0
, deepseq , deepseq
, directory , directory
, filepath , filepath