Fix doc
in non-cabal projects
..man those non-cabal projects are really getting me down. Who uses those anwayways ;)
This commit is contained in:
parent
6248372477
commit
585a9ef425
@ -19,7 +19,8 @@ module Language.Haskell.GhcMod.CabalHelper
|
|||||||
#ifndef SPEC
|
#ifndef SPEC
|
||||||
( getComponents
|
( getComponents
|
||||||
, getGhcMergedPkgOptions
|
, getGhcMergedPkgOptions
|
||||||
, getPackageDbStack
|
, getCabalPackageDbStack
|
||||||
|
, getCustomPkgDbStack
|
||||||
, prepareCabalHelper
|
, prepareCabalHelper
|
||||||
)
|
)
|
||||||
#endif
|
#endif
|
||||||
@ -60,25 +61,8 @@ getGhcMergedPkgOptions = chCached Cached {
|
|||||||
return ([setupConfigPath], opts)
|
return ([setupConfigPath], opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
parseCustomPackageDb :: String -> [GhcPkgDb]
|
getCabalPackageDbStack :: (IOish m, GmEnv m, GmState m, GmLog m) => m [GhcPkgDb]
|
||||||
parseCustomPackageDb src = map parsePkgDb $ filter (not . null) $ lines src
|
getCabalPackageDbStack = chCached Cached {
|
||||||
where
|
|
||||||
parsePkgDb "global" = GlobalDb
|
|
||||||
parsePkgDb "user" = UserDb
|
|
||||||
parsePkgDb s = PackageDb s
|
|
||||||
|
|
||||||
getCustomPkgDbStack :: (IOish m, GmEnv m) => m (Maybe [GhcPkgDb])
|
|
||||||
getCustomPkgDbStack = do
|
|
||||||
mCusPkgDbFile <- liftIO . (traverse readFile <=< findCustomPackageDbFile) . cradleRootDir =<< cradle
|
|
||||||
return $ parseCustomPackageDb <$> mCusPkgDbFile
|
|
||||||
|
|
||||||
getPackageDbStack :: (IOish m, GmEnv m, GmState m, GmLog m) => m [GhcPkgDb]
|
|
||||||
getPackageDbStack = do
|
|
||||||
mCusPkgStack <- getCustomPkgDbStack
|
|
||||||
flip fromMaybe mCusPkgStack <$> getPackageDbStack'
|
|
||||||
|
|
||||||
getPackageDbStack' :: (IOish m, GmEnv m, GmState m, GmLog m) => m [GhcPkgDb]
|
|
||||||
getPackageDbStack' = chCached Cached {
|
|
||||||
cacheLens = Just (lGmcPackageDbStack . lGmCaches),
|
cacheLens = Just (lGmcPackageDbStack . lGmCaches),
|
||||||
cacheFile = pkgDbStackCacheFile,
|
cacheFile = pkgDbStackCacheFile,
|
||||||
cachedAction = \ _tcf (progs, rootdir, distdir, _) _ma -> do
|
cachedAction = \ _tcf (progs, rootdir, distdir, _) _ma -> do
|
||||||
@ -136,6 +120,18 @@ prepareCabalHelper = do
|
|||||||
when (cradleProjectType crdl == CabalProject) $
|
when (cradleProjectType crdl == CabalProject) $
|
||||||
withCabal $ liftIO $ prepare readProc projdir distdir
|
withCabal $ liftIO $ prepare readProc projdir distdir
|
||||||
|
|
||||||
|
parseCustomPackageDb :: String -> [GhcPkgDb]
|
||||||
|
parseCustomPackageDb src = map parsePkgDb $ filter (not . null) $ lines src
|
||||||
|
where
|
||||||
|
parsePkgDb "global" = GlobalDb
|
||||||
|
parsePkgDb "user" = UserDb
|
||||||
|
parsePkgDb s = PackageDb s
|
||||||
|
|
||||||
|
getCustomPkgDbStack :: (IOish m, GmEnv m) => m (Maybe [GhcPkgDb])
|
||||||
|
getCustomPkgDbStack = do
|
||||||
|
mCusPkgDbFile <- liftIO . (traverse readFile <=< findCustomPackageDbFile) . cradleRootDir =<< cradle
|
||||||
|
return $ parseCustomPackageDb <$> mCusPkgDbFile
|
||||||
|
|
||||||
withCabal :: (IOish m, GmEnv m, GmLog m) => m a -> m a
|
withCabal :: (IOish m, GmEnv m, GmLog m) => m a -> m a
|
||||||
withCabal action = do
|
withCabal action = do
|
||||||
crdl <- cradle
|
crdl <- cradle
|
||||||
|
@ -4,6 +4,7 @@ module Language.Haskell.GhcMod.GhcPkg (
|
|||||||
, ghcPkgDbStackOpts
|
, ghcPkgDbStackOpts
|
||||||
, ghcDbStackOpts
|
, ghcDbStackOpts
|
||||||
, ghcDbOpt
|
, ghcDbOpt
|
||||||
|
, getPackageDbStack
|
||||||
, getPackageCachePaths
|
, getPackageCachePaths
|
||||||
) where
|
) where
|
||||||
|
|
||||||
@ -58,18 +59,23 @@ ghcDbOpt (PackageDb pkgDb)
|
|||||||
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
getPackageCachePaths :: IOish m => FilePath -> GhcModT m [FilePath]
|
getPackageDbStack :: IOish m => GhcModT m [GhcPkgDb]
|
||||||
getPackageCachePaths sysPkgCfg = do
|
getPackageDbStack = do
|
||||||
crdl <- cradle
|
crdl <- cradle
|
||||||
pkgDbStack <- case cradleProjectType crdl of
|
mCusPkgStack <- getCustomPkgDbStack
|
||||||
|
stack <- case cradleProjectType crdl of
|
||||||
PlainProject ->
|
PlainProject ->
|
||||||
return [GlobalDb, UserDb]
|
return [GlobalDb, UserDb]
|
||||||
SandboxProject -> do
|
SandboxProject -> do
|
||||||
Just db <- liftIO $ getSandboxDb $ cradleRootDir crdl
|
Just db <- liftIO $ getSandboxDb $ cradleRootDir crdl
|
||||||
return $ [GlobalDb, db]
|
return $ [GlobalDb, db]
|
||||||
CabalProject ->
|
CabalProject ->
|
||||||
getPackageDbStack
|
getCabalPackageDbStack
|
||||||
|
return $ fromMaybe stack mCusPkgStack
|
||||||
|
|
||||||
|
getPackageCachePaths :: IOish m => FilePath -> GhcModT m [FilePath]
|
||||||
|
getPackageCachePaths sysPkgCfg = do
|
||||||
|
pkgDbStack <- getPackageDbStack
|
||||||
catMaybes <$> (liftIO . resolvePackageConfig sysPkgCfg) `mapM` pkgDbStack
|
catMaybes <$> (liftIO . resolvePackageConfig sysPkgCfg) `mapM` pkgDbStack
|
||||||
|
|
||||||
-- TODO: use PkgConfRef
|
-- TODO: use PkgConfRef
|
||||||
|
@ -4,7 +4,6 @@ import Language.Haskell.GhcMod.Types
|
|||||||
import Language.Haskell.GhcMod.GhcPkg
|
import Language.Haskell.GhcMod.GhcPkg
|
||||||
import Language.Haskell.GhcMod.Monad
|
import Language.Haskell.GhcMod.Monad
|
||||||
import Language.Haskell.GhcMod.Utils
|
import Language.Haskell.GhcMod.Utils
|
||||||
import Language.Haskell.GhcMod.CabalHelper
|
|
||||||
|
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
import Prelude
|
import Prelude
|
||||||
|
@ -91,6 +91,6 @@ spec = do
|
|||||||
(s, s') <- runD $ do
|
(s, s') <- runD $ do
|
||||||
Just stack <- getCustomPkgDbStack
|
Just stack <- getCustomPkgDbStack
|
||||||
withCabal $ do
|
withCabal $ do
|
||||||
stack' <- getPackageDbStack'
|
stack' <- getCabalPackageDbStack
|
||||||
return (stack, stack')
|
return (stack, stack')
|
||||||
s' `shouldBe` s
|
s' `shouldBe` s
|
||||||
|
30
test/GhcPkgSpec.hs
Normal file
30
test/GhcPkgSpec.hs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
module GhcPkgSpec where
|
||||||
|
|
||||||
|
import Control.Arrow
|
||||||
|
import Control.Applicative
|
||||||
|
import Distribution.Helper
|
||||||
|
import Language.Haskell.GhcMod.GhcPkg
|
||||||
|
import Language.Haskell.GhcMod.PathsAndFiles
|
||||||
|
import Language.Haskell.GhcMod.CabalHelper
|
||||||
|
import Language.Haskell.GhcMod.Error
|
||||||
|
import Test.Hspec
|
||||||
|
import System.Directory
|
||||||
|
import System.FilePath
|
||||||
|
import System.Process (readProcess, system)
|
||||||
|
|
||||||
|
import Dir
|
||||||
|
import TestUtils
|
||||||
|
import Data.List
|
||||||
|
|
||||||
|
spec :: Spec
|
||||||
|
spec = do
|
||||||
|
describe "getPackageDbStack'" $ do
|
||||||
|
it "fixes out of sync custom pkg-db stack" $ do
|
||||||
|
withDirectory_ "test/data/custom-cradle" $ do
|
||||||
|
_ <- system "cabal configure"
|
||||||
|
(s, s') <- runD $ do
|
||||||
|
Just stack <- getCustomPkgDbStack
|
||||||
|
withCabal $ do
|
||||||
|
stack' <- getPackageDbStack
|
||||||
|
return (stack, stack')
|
||||||
|
s' `shouldBe` s
|
Loading…
Reference in New Issue
Block a user