@@ -6,10 +6,14 @@ module Bump
66
77
88import qualified Data.List as List
9+import qualified Data.NonEmptyList as NE
910
11+import qualified Build
1012import qualified Deps.Bump as Bump
1113import qualified Deps.Diff as Diff
1214import qualified Deps.Registry as Registry
15+import qualified Elm.Details as Details
16+import qualified Elm.Docs as Docs
1317import qualified Elm.Magnitude as M
1418import qualified Elm.Outline as Outline
1519import qualified Elm.Version as V
@@ -43,7 +47,7 @@ data Env =
4347 , _cache :: Stuff.PackageCache
4448 , _manager :: Http.Manager
4549 , _registry :: Registry.Registry
46− , _outline :: Outline.Outline
50+ , _outline :: Outline.PkgOutline
4751 }
4852
4953
@@ -58,13 +62,13 @@ getEnv =
5862 do cache <- Task.io $ Stuff.getPackageCache
5963 manager <- Task.io $ Http.getManager
6064 registry <- Task.eio Exit.BumpMustHaveLatestRegistry $ Registry.latest manager cache
61− outlineResult <- Task.io $ Outline.read root
62− case outlineResult of
63− Right outline ->
64− return $ Env root cache manager registry outline
65+ outline <- Task.eio Exit.BumpBadOutline $ Outline.read root
66+ case outline of
67+ Outline.App _ ->
68+ Task.throw Exit.BumpApplication
6569
66− Left problem ->
67− Task.throw $ Exit.BumpBadOutline problem
70+ Outline.Pkg pkgOutline ->
71+ return $ Env root cache manager registry pkgOutline
6872
6973
7074
@@ -72,26 +76,21 @@ getEnv =
7276
7377
7478bump :: Env -> Task.Task Exit.Bump ()
75−bump env@(Env root _ _ registry outline) =
76− case outline of
77− Outline.App _ ->
78− Task.throw Exit.BumpApplication
79−
80− Outline.Pkg pkgOutline@(Outline.PkgOutline pkg _ _ vsn _ _ _ _) ->
81− case Registry.getVersions pkg registry of
82− Just knownVersions ->
83− let
84− bumpableVersions =
85− map (\(old, _, _) -> old) (Bump.getPossibilities knownVersions)
86− in
87− if elem vsn bumpableVersions
88− then suggestVersion env pkgOutline
89− else
90− Task.throw $ Exit.BumpUnexpectedVersion vsn $
91− map head (List.group (List.sort bumpableVersions))
79+bump env@(Env root _ _ registry outline@(Outline.PkgOutline pkg _ _ vsn _ _ _ _)) =
80+ case Registry.getVersions pkg registry of
81+ Just knownVersions ->
82+ let
83+ bumpableVersions =
84+ map (\(old, _, _) -> old) (Bump.getPossibilities knownVersions)
85+ in
86+ if elem vsn bumpableVersions
87+ then suggestVersion env
88+ else
89+ Task.throw $ Exit.BumpUnexpectedVersion vsn $
90+ map head (List.group (List.sort bumpableVersions))
9291
93− Nothing ->
94− Task.io $ checkNewPackage root pkgOutline
92+ Nothing ->
93+ Task.io $ checkNewPackage root outline
9594
9695
9796
@@ -115,10 +114,10 @@ checkNewPackage root outline@(Outline.PkgOutline _ _ _ version _ _ _ _) =
115114-- SUGGEST VERSION
116115
117116
118−suggestVersion :: Env -> Outline.PkgOutline -> Task.Task Exit.Bump ()
119−suggestVersion (Env root cache manager _ _) outline@(Outline.PkgOutline pkg _ _ vsn _ _ _ _) =
117+suggestVersion :: Env -> Task.Task Exit.Bump ()
118+suggestVersion (Env root cache manager _ outline@(Outline.PkgOutline pkg _ _ vsn _ _ _ _)) =
120119 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
122121 let changes = Diff.diff oldDocs newDocs
123122 let newVersion = Diff.bump changes vsn
124123 Task.io $ changeVersion root outline newVersion $
@@ -133,6 +132,20 @@ suggestVersion (Env root cache manager _ _) outline@(Outline.PkgOutline pkg _ _
133132 <> "Should I perform the update (" <> old <> " => " <> new <> ") in elm.json? [Y/n] "
134133
135134
135+generateDocs :: FilePath -> Outline.PkgOutline -> Task.Task Exit.Bump Docs.Documentation
136+generateDocs root (Outline.PkgOutline _ _ _ _ exposed _ _ _) =
137+ do details <-
138+ Task.eio Exit.BumpBadDetails $ Details.load Reporting.silent root
139+
140+ case Outline.flattenExposed exposed of
141+ [] ->
142+ Task.throw $ Exit.BumpNoExposed
143+
144+ e:es ->
145+ Task.eio Exit.BumpBadBuild $
146+ Build.fromExposed Reporting.silent root details Build.KeepDocs (NE.List e es)
147+
148+
136149
137150-- CHANGE VERSION
138151