on master help sign in
Get "elm init" compiling again
commitf563edc63d96631e73db4b5072f45d3ee04577ec authorEvan Czaplicki <evancz@users.noreply.github.com> dateTue 26 Mar 2019, 11:10 (8 years ago) parentb99047b
1 file changed+38−35
terminal/src/Init.hs+38−35
terminal/src/Init.hs+38−35
@@ -10,18 +10,17 @@ import Control.Monad.Trans (liftIO)
1010import qualified Data.Map as Map
1111import qualified System.Directory as Dir
1212
13−import qualified Deps.Cache as Cache
14−import qualified Deps.Explorer as Explorer
13+import qualified Deps.Registry as Registry
1514import qualified Deps.Solver as Solver
1615import qualified Elm.Constraint as Con
16+import qualified Elm.Outline as Outline
1717import qualified Elm.Package as Pkg
18−import qualified Elm.Project.Json as Project
1918import qualified Elm.Version as V
19+import qualified Http
20+import qualified Reporting
2021import qualified Reporting.Doc as D
2122import qualified Reporting.Exit as Exit
22−import qualified Reporting.Exit.Init as E
23−import qualified Reporting.Task as Task
24−import qualified Reporting.Progress.Terminal as Terminal
23+import qualified Stuff
2524
2625
2726
@@ -30,19 +29,17 @@ import qualified Reporting.Progress.Terminal as Terminal
3029
3130run :: () -> () -> IO ()
3231run () () =
33− do reporter <- Terminal.create
34− exists <- Dir.doesFileExist "elm.json"
35− Task.run reporter $
36− if exists then
37− Task.throw (Exit.Init E.AlreadyStarted)
32+ Reporting.attempt Exit.initToReport $
33+ do exists <- Dir.doesFileExist "elm.json"
34+ if exists
35+ then return (Left Exit.InitAlreadyExists)
3836 else
39− do approved <- Task.getApproval question
37+ do approved <- Reporting.ask question
4038 if approved
41− then
42− do init
43− liftIO $ putStrLn "Okay, I created it. Now read that link!"
39+ then init
4440 else
45− liftIO $ putStrLn "Okay, I did not make any changes!"
41+ do putStrLn "Okay, I did not make any changes!"
42+ return (Right ())
4643
4744
4845question :: D.Doc
@@ -69,26 +66,32 @@ question =
6966-- INIT
7067
7168
72−init :: Task.Task ()
69+init :: IO (Either Exit.Init ())
7370init =
74− do registry <- Cache.optionalUpdate
75−
76− maybeSolution <-
77− Explorer.run registry $ Solver.run $ Solver.solve defaults
78−
79− case maybeSolution of
80− Just solution ->
81− let
82− directs = Map.intersection solution defaults
83− indirects = Map.difference solution defaults
84− in
85− liftIO $
86− do Dir.createDirectoryIfMissing True "src"
87− Project.write "." $ Project.App $
88− Project.AppInfo V.compiler ["src"] directs indirects Map.empty Map.empty
89−
90− Nothing ->
91− Task.throw (Exit.Init (E.NoSolution (Map.keys defaults)))
71+ do cache <- Stuff.getPackageCache
72+ manager <- Http.getManager
73+ eregistry <- Registry.latest manager cache
74+ case eregistry of
75+ Left rp ->
76+ return (Left (Exit.InitRegistryProblem rp))
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 ->
85+ let
86+ solution = Map.map (\(Solver.Details vsn _) -> vsn) details
87+ directs = Map.intersection solution defaults
88+ indirects = Map.difference solution defaults
89+ in
90+ do Dir.createDirectoryIfMissing True "src"
91+ Outline.write "." $ Outline.App $
92+ Outline.AppOutline V.compiler ["src"] directs indirects Map.empty Map.empty
93+ putStrLn "Okay, I created it. Now read that link!"
94+ return (Right ())
9295
9396
9497defaults :: Map.Map Pkg.Name Con.Constraint