on master help sign in
Get "elm init" compiling again
f563edcEvan Czaplicki
terminal/src/Init.hs+38−35
@@ -10,18 +10,17 @@ import Control.Monad.Trans (liftIO)
10import qualified Data.Map as Map
10import qualified Data.Map as Map
11import qualified System.Directory as Dir
11import qualified System.Directory as Dir
12
12
13−import qualified Deps.Cache as Cache
13+import qualified Deps.Registry as Registry
14−import qualified Deps.Explorer as Explorer
15import qualified Deps.Solver as Solver
14import qualified Deps.Solver as Solver
16import qualified Elm.Constraint as Con
15import qualified Elm.Constraint as Con
16+import qualified Elm.Outline as Outline
17import qualified Elm.Package as Pkg
17import qualified Elm.Package as Pkg
18−import qualified Elm.Project.Json as Project
19import qualified Elm.Version as V
18import qualified Elm.Version as V
19+import qualified Http
20+import qualified Reporting
20import qualified Reporting.Doc as D
21import qualified Reporting.Doc as D
21import qualified Reporting.Exit as Exit
22import qualified Reporting.Exit as Exit
22−import qualified Reporting.Exit.Init as E
23+import qualified Stuff
23−import qualified Reporting.Task as Task
24−import qualified Reporting.Progress.Terminal as Terminal
25
24
26
25
27
26
@@ -30,19 +29,17 @@ import qualified Reporting.Progress.Terminal as Terminal
30
29
31run :: () -> () -> IO ()
30run :: () -> () -> IO ()
32run () () =
31run () () =
33− do reporter <- Terminal.create
32+ Reporting.attempt Exit.initToReport $
34− exists <- Dir.doesFileExist "elm.json"
33+ do exists <- Dir.doesFileExist "elm.json"
35− Task.run reporter $
36− if exists then
34+ if exists
37− Task.throw (Exit.Init E.AlreadyStarted)
35+ then return (Left Exit.InitAlreadyExists)
38 else
36 else
39− do approved <- Task.getApproval question
37+ do approved <- Reporting.ask question
40 if approved
38 if approved
41− then
39+ then init
42− do init
43− liftIO $ putStrLn "Okay, I created it. Now read that link!"
44 else
40 else
45− liftIO $ putStrLn "Okay, I did not make any changes!"
41+ do putStrLn "Okay, I did not make any changes!"
42+ return (Right ())
46
43
47
44
48question :: D.Doc
45question :: D.Doc
@@ -69,26 +66,32 @@ question =
69-- INIT
66-- INIT
70
67
71
68
72−init :: Task.Task ()
69+init :: IO (Either Exit.Init ())
73init =
70init =
74− do registry <- Cache.optionalUpdate
71+ do cache <- Stuff.getPackageCache
75−
72+ manager <- Http.getManager
76− maybeSolution <-
73+ eregistry <- Registry.latest manager cache
77− Explorer.run registry $ Solver.run $ Solver.solve defaults
74+ case eregistry of
78−
75+ Left rp ->
79− case maybeSolution of
76+ return (Left (Exit.InitRegistryProblem rp))
80− Just solution ->
77+
78+ Right registry ->
79+ do result <- Solver.online cache manager registry defaults
80+ case result of
81+ Left _ ->
82+ return (Left (Exit.InitNoSolution (Map.keys defaults)))
83+
84+ Right details ->
81− let
85+ let
86+ solution = Map.map (\(Solver.Details vsn _) -> vsn) details
82− directs = Map.intersection solution defaults
87+ directs = Map.intersection solution defaults
83− indirects = Map.difference solution defaults
88+ indirects = Map.difference solution defaults
84− in
89+ in
85− liftIO $
86− do Dir.createDirectoryIfMissing True "src"
90+ do Dir.createDirectoryIfMissing True "src"
87− Project.write "." $ Project.App $
91+ Outline.write "." $ Outline.App $
88− Project.AppInfo V.compiler ["src"] directs indirects Map.empty Map.empty
92+ Outline.AppOutline V.compiler ["src"] directs indirects Map.empty Map.empty
89−
93+ putStrLn "Okay, I created it. Now read that link!"
90− Nothing ->
94+ return (Right ())
91− Task.throw (Exit.Init (E.NoSolution (Map.keys defaults)))
92
95
93
96
94defaults :: Map.Map Pkg.Name Con.Constraint
97defaults :: Map.Map Pkg.Name Con.Constraint