forked from commercialhaskell/stack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProjectAndConfigMonoid.hs
More file actions
57 lines (52 loc) · 2.29 KB
/
ProjectAndConfigMonoid.hs
File metadata and controls
57 lines (52 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Stack.Types.ProjectAndConfigMonoid
( ProjectAndConfigMonoid (..)
, parseProjectAndConfigMonoid
) where
import qualified Data.Set as Set
import qualified Data.Yaml as Yaml
import Pantry.Internal.AesonExtended
( WithJSONWarnings, Value, (...:), (..:?), (..!=)
, jsonSubWarnings, jsonSubWarningsT, jsonSubWarningsTT
, withObjectWarnings )
import Stack.Prelude
import Stack.Types.ConfigMonoid
( ConfigMonoid, parseConfigMonoidObject )
import Stack.Types.Project ( Project (..) )
data ProjectAndConfigMonoid
= ProjectAndConfigMonoid !Project !ConfigMonoid
parseProjectAndConfigMonoid ::
Path Abs Dir
-> Value
-> Yaml.Parser (WithJSONWarnings (IO ProjectAndConfigMonoid))
parseProjectAndConfigMonoid rootDir =
withObjectWarnings "ProjectAndConfigMonoid" $ \o -> do
packages <- o ..:? "packages" ..!= [RelFilePath "."]
deps <- jsonSubWarningsTT (o ..:? "extra-deps") ..!= []
flags' <- o ..:? "flags" ..!= mempty
let flags = unCabalStringMap <$> unCabalStringMap
(flags' :: Map (CabalString PackageName) (Map (CabalString FlagName) Bool))
resolver <- jsonSubWarnings $ o ...: ["snapshot", "resolver"]
mcompiler <- o ..:? "compiler"
msg <- o ..:? "user-message"
config <- parseConfigMonoidObject rootDir o
extraPackageDBs <- o ..:? "extra-package-dbs" ..!= []
mcurator <- jsonSubWarningsT (o ..:? "curator")
drops <- o ..:? "drop-packages" ..!= mempty
pure $ do
deps' <- mapM (resolvePaths (Just rootDir)) deps
resolver' <- resolvePaths (Just rootDir) resolver
let project = Project
{ projectUserMsg = msg
, projectResolver = resolver'
, projectCompiler = mcompiler -- FIXME make sure resolver' isn't SLCompiler
, projectExtraPackageDBs = extraPackageDBs
, projectPackages = packages
, projectDependencies =
concatMap toList (deps' :: [NonEmpty RawPackageLocation])
, projectFlags = flags
, projectCurator = mcurator
, projectDropPackages = Set.map unCabalString drops
}
pure $ ProjectAndConfigMonoid project config