@@ -4,11 +4,10 @@ module Deps.Diff
44 , PackageChanges(..)
55 , ModuleChanges(..)
66 , Changes(..)
7− , Magnitude(..)
87 , moduleChangeMagnitude
9− , magnitudeToString
108 , toMagnitude
119 , bump
10+ , getDocs
1211 )
1312 where
1413
@@ -21,10 +20,18 @@ import qualified Data.Name as Name
2120import qualified Data.Set as Set
2221import qualified Data.Utf8 as Utf8
2322
23+import qualified Deps.Website as Website
2424import qualified Elm.Compiler.Type as Type
2525import qualified Elm.Docs as Docs
26+import qualified Elm.Magnitude as M
2627import qualified Elm.ModuleName as ModuleName
28+import qualified Elm.Package as Pkg
2729import qualified Elm.Version as V
30+import qualified File
31+import qualified Http
32+import qualified Json.Decode as D
33+import qualified Reporting.Exit as Exit
34+import qualified Stuff
2835
2936
3037
@@ -73,7 +80,7 @@ diff :: Docs.Documentation -> Docs.Documentation -> PackageChanges
7380diff oldDocs newDocs =
7481 let
7582 filterOutPatches chngs =
76− Map.filter (\chng -> moduleChangeMagnitude chng /= PATCH) chngs
83+ Map.filter (\chng -> moduleChangeMagnitude chng /= M.PATCH) chngs
7784
7885 (Changes added changed removed) =
7986 getChanges (\_ _ -> False) oldDocs newDocs
@@ -298,50 +305,30 @@ categorizeVar name
298305-- MAGNITUDE
299306
300307
301−data Magnitude
302− = PATCH
303− | MINOR
304− | MAJOR
305− deriving (Eq, Ord)
306−
307−
308−magnitudeToString :: Magnitude -> String
309−magnitudeToString magnitude =
310− case magnitude of
311− PATCH ->
312− "PATCH"
313−
314− MINOR ->
315− "MINOR"
316−
317− MAJOR ->
318− "MAJOR"
319−
320−
321308bump :: PackageChanges -> V.Version -> V.Version
322309bump changes version =
323310 case toMagnitude changes of
324− PATCH ->
311+ M.PATCH ->
325312 V.bumpPatch version
326313
327− MINOR ->
314+ M.MINOR ->
328315 V.bumpMinor version
329316
330− MAJOR ->
317+ M.MAJOR ->
331318 V.bumpMajor version
332319
333320
334−toMagnitude :: PackageChanges -> Magnitude
321+toMagnitude :: PackageChanges -> M.Magnitude
335322toMagnitude (PackageChanges added changed removed) =
336323 let
337− addMag = if null added then PATCH else MINOR
338− removeMag = if null removed then PATCH else MAJOR
324+ addMag = if null added then M.PATCH else M.MINOR
325+ removeMag = if null removed then M.PATCH else M.MAJOR
339326 changeMags = map moduleChangeMagnitude (Map.elems changed)
340327 in
341328 maximum (addMag : removeMag : changeMags)
342329
343330
344−moduleChangeMagnitude :: ModuleChanges -> Magnitude
331+moduleChangeMagnitude :: ModuleChanges -> M.Magnitude
345332moduleChangeMagnitude (ModuleChanges unions aliases values binops) =
346333 maximum
347334 [ changeMagnitude unions
@@ -351,13 +338,43 @@ moduleChangeMagnitude (ModuleChanges unions aliases values binops) =
351338 ]
352339
353340
354−changeMagnitude :: Changes k v -> Magnitude
341+changeMagnitude :: Changes k v -> M.Magnitude
355342changeMagnitude (Changes added changed removed) =
356343 if Map.size removed > 0 || Map.size changed > 0 then
357− MAJOR
344+ M.MAJOR
358345
359346 else if Map.size added > 0 then
360− MINOR
347+ M.MINOR
361348
362349 else
363− PATCH
350+ M.PATCH
351+
352+
353+
354+-- GET DOCS
355+
356+
357+getDocs :: Stuff.PackageCache -> Http.Manager -> Pkg.Name -> V.Version -> IO (Either Exit.DocsProblem Docs.Documentation)
358+getDocs cache manager name version =
359+ do let path = Stuff.metadata cache name version "docs.json"
360+ exists <- File.exists path
361+ if exists
362+ then
363+ do result <- D.fromFile Docs.decoder path
364+ case result of
365+ Right docs ->
366+ return $ Right docs
367+
368+ Left _ ->
369+ do File.remove path
370+ return $ Left Exit.DP_Cache
371+ else
372+ do let url = Website.metadata name version "docs.json"
373+ Http.post manager url [] Exit.DP_Http $ \body ->
374+ case D.fromByteString Docs.decoder body of
375+ Right docs ->
376+ do File.writeUtf8 path body
377+ return $ Right docs
378+
379+ Left _ ->
380+ return $ Left Exit.DP_Data