@@ -6,10 +6,14 @@ module Bump
8import qualified Data.List as List
8import qualified Data.List as List
9+import qualified Data.NonEmptyList as NE
11+import qualified Build
10import qualified Deps.Bump as Bump
12import qualified Deps.Bump as Bump
11import qualified Deps.Diff as Diff
13import qualified Deps.Diff as Diff
12import qualified Deps.Registry as Registry
14import qualified Deps.Registry as Registry
15+import qualified Elm.Details as Details
16+import qualified Elm.Docs as Docs
13import qualified Elm.Magnitude as M
17import qualified Elm.Magnitude as M
14import qualified Elm.Outline as Outline
18import qualified Elm.Outline as Outline
15import qualified Elm.Version as V
19import qualified Elm.Version as V
@@ -43,7 +47,7 @@ data Env =
43 , _cache :: Stuff.PackageCache
47 , _cache :: Stuff.PackageCache
44 , _manager :: Http.Manager
48 , _manager :: Http.Manager
45 , _registry :: Registry.Registry
49 , _registry :: Registry.Registry
46− , _outline :: Outline.Outline
50+ , _outline :: Outline.PkgOutline
@@ -58,13 +62,13 @@ getEnv =
58 do cache <- Task.io $ Stuff.getPackageCache
62 do cache <- Task.io $ Stuff.getPackageCache
59 manager <- Task.io $ Http.getManager
63 manager <- Task.io $ Http.getManager
60 registry <- Task.eio Exit.BumpMustHaveLatestRegistry $ Registry.latest manager cache
64 registry <- Task.eio Exit.BumpMustHaveLatestRegistry $ Registry.latest manager cache
61− outlineResult <- Task.io $ Outline.read root
65+ outline <- Task.eio Exit.BumpBadOutline $ Outline.read root
62− case outlineResult of
66+ case outline of
63− Right outline ->
67+ Outline.App _ ->
64− return $ Env root cache manager registry outline
68+ Task.throw Exit.BumpApplication
66− Left problem ->
70+ Outline.Pkg pkgOutline ->
67− Task.throw $ Exit.BumpBadOutline problem
71+ return $ Env root cache manager registry pkgOutline
@@ -72,26 +76,21 @@ getEnv =
74bump :: Env -> Task.Task Exit.Bump ()
78bump :: Env -> Task.Task Exit.Bump ()
75−bump env@(Env root _ _ registry outline) =
79+bump env@(Env root _ _ registry outline@(Outline.PkgOutline pkg _ _ vsn _ _ _ _)) =
78− Task.throw Exit.BumpApplication
80− Outline.Pkg pkgOutline@(Outline.PkgOutline pkg _ _ vsn _ _ _ _) ->
81− case Registry.getVersions pkg registry of
80+ case Registry.getVersions pkg registry of
82− Just knownVersions ->
81+ Just knownVersions ->
84− bumpableVersions =
83+ bumpableVersions =
85− map (\(old, _, _) -> old) (Bump.getPossibilities knownVersions)
84+ map (\(old, _, _) -> old) (Bump.getPossibilities knownVersions)
87− if elem vsn bumpableVersions
86+ if elem vsn bumpableVersions
88− then suggestVersion env pkgOutline
87+ then suggestVersion env
90− Task.throw $ Exit.BumpUnexpectedVersion vsn $
89+ Task.throw $ Exit.BumpUnexpectedVersion vsn $
91− map head (List.group (List.sort bumpableVersions))
90+ map head (List.group (List.sort bumpableVersions))
93− Nothing ->
92+ Nothing ->
94− Task.io $ checkNewPackage root pkgOutline
93+ Task.io $ checkNewPackage root outline
@@ -115,10 +114,10 @@ checkNewPackage root outline@(Outline.PkgOutline _ _ _ version _ _ _ _) =
115-- SUGGEST VERSION
114-- SUGGEST VERSION
118−suggestVersion :: Env -> Outline.PkgOutline -> Task.Task Exit.Bump ()
117+suggestVersion :: Env -> Task.Task Exit.Bump ()
119−suggestVersion (Env root cache manager _ _) outline@(Outline.PkgOutline pkg _ _ vsn _ _ _ _) =
118+suggestVersion (Env root cache manager _ outline@(Outline.PkgOutline pkg _ _ vsn _ _ _ _)) =
120 do oldDocs <- Task.eio (Exit.BumpCannotFindDocs pkg vsn) (Diff.getDocs cache manager pkg vsn)
119 do oldDocs <- Task.eio (Exit.BumpCannotFindDocs pkg vsn) (Diff.getDocs cache manager pkg vsn)
121− newDocs <- error "TODO Outline.generateDocs summary"
120+ newDocs <- generateDocs root outline
122 let changes = Diff.diff oldDocs newDocs
121 let changes = Diff.diff oldDocs newDocs
123 let newVersion = Diff.bump changes vsn
122 let newVersion = Diff.bump changes vsn
124 Task.io $ changeVersion root outline newVersion $
123 Task.io $ changeVersion root outline newVersion $
@@ -133,6 +132,20 @@ suggestVersion (Env root cache manager _ _) outline@(Outline.PkgOutline pkg _ _
133 <> "Should I perform the update (" <> old <> " => " <> new <> ") in elm.json? [Y/n] "
132 <> "Should I perform the update (" <> old <> " => " <> new <> ") in elm.json? [Y/n] "
135+generateDocs :: FilePath -> Outline.PkgOutline -> Task.Task Exit.Bump Docs.Documentation
136+generateDocs root (Outline.PkgOutline _ _ _ _ exposed _ _ _) =
138+ Task.eio Exit.BumpBadDetails $ Details.load Reporting.silent root
140+ case Outline.flattenExposed exposed of
142+ Task.throw $ Exit.BumpNoExposed
145+ Task.eio Exit.BumpBadBuild $
146+ Build.fromExposed Reporting.silent root details Build.KeepDocs (NE.List e es)
137-- CHANGE VERSION
150-- CHANGE VERSION