on master help sign in
Shuffle code in Deps.Diff
d09b95aEvan Czaplicki
builder/src/Deps/Diff.hs+51−34
@@ -4,11 +4,10 @@ module Deps.Diff
4 , PackageChanges(..)
4 , PackageChanges(..)
5 , ModuleChanges(..)
5 , ModuleChanges(..)
6 , Changes(..)
6 , Changes(..)
7− , Magnitude(..)
8 , moduleChangeMagnitude
7 , moduleChangeMagnitude
9− , magnitudeToString
10 , toMagnitude
8 , toMagnitude
11 , bump
9 , bump
10+ , getDocs
12 )
11 )
13 where
12 where
14
13
@@ -21,10 +20,18 @@ import qualified Data.Name as Name
21import qualified Data.Set as Set
20import qualified Data.Set as Set
22import qualified Data.Utf8 as Utf8
21import qualified Data.Utf8 as Utf8
23
22
23+import qualified Deps.Website as Website
24import qualified Elm.Compiler.Type as Type
24import qualified Elm.Compiler.Type as Type
25import qualified Elm.Docs as Docs
25import qualified Elm.Docs as Docs
26+import qualified Elm.Magnitude as M
26import qualified Elm.ModuleName as ModuleName
27import qualified Elm.ModuleName as ModuleName
28+import qualified Elm.Package as Pkg
27import qualified Elm.Version as V
29import 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
28
35
29
36
30
37
@@ -73,7 +80,7 @@ diff :: Docs.Documentation -> Docs.Documentation -> PackageChanges
73diff oldDocs newDocs =
80diff oldDocs newDocs =
74 let
81 let
75 filterOutPatches chngs =
82 filterOutPatches chngs =
76− Map.filter (\chng -> moduleChangeMagnitude chng /= PATCH) chngs
83+ Map.filter (\chng -> moduleChangeMagnitude chng /= M.PATCH) chngs
77
84
78 (Changes added changed removed) =
85 (Changes added changed removed) =
79 getChanges (\_ _ -> False) oldDocs newDocs
86 getChanges (\_ _ -> False) oldDocs newDocs
@@ -298,50 +305,30 @@ categorizeVar name
298-- MAGNITUDE
305-- MAGNITUDE
299
306
300
307
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−
321bump :: PackageChanges -> V.Version -> V.Version
308bump :: PackageChanges -> V.Version -> V.Version
322bump changes version =
309bump changes version =
323 case toMagnitude changes of
310 case toMagnitude changes of
324− PATCH ->
311+ M.PATCH ->
325 V.bumpPatch version
312 V.bumpPatch version
326
313
327− MINOR ->
314+ M.MINOR ->
328 V.bumpMinor version
315 V.bumpMinor version
329
316
330− MAJOR ->
317+ M.MAJOR ->
331 V.bumpMajor version
318 V.bumpMajor version
332
319
333
320
334−toMagnitude :: PackageChanges -> Magnitude
321+toMagnitude :: PackageChanges -> M.Magnitude
335toMagnitude (PackageChanges added changed removed) =
322toMagnitude (PackageChanges added changed removed) =
336 let
323 let
337− addMag = if null added then PATCH else MINOR
324+ addMag = if null added then M.PATCH else M.MINOR
338− removeMag = if null removed then PATCH else MAJOR
325+ removeMag = if null removed then M.PATCH else M.MAJOR
339 changeMags = map moduleChangeMagnitude (Map.elems changed)
326 changeMags = map moduleChangeMagnitude (Map.elems changed)
340 in
327 in
341 maximum (addMag : removeMag : changeMags)
328 maximum (addMag : removeMag : changeMags)
342
329
343
330
344−moduleChangeMagnitude :: ModuleChanges -> Magnitude
331+moduleChangeMagnitude :: ModuleChanges -> M.Magnitude
345moduleChangeMagnitude (ModuleChanges unions aliases values binops) =
332moduleChangeMagnitude (ModuleChanges unions aliases values binops) =
346 maximum
333 maximum
347 [ changeMagnitude unions
334 [ changeMagnitude unions
@@ -351,13 +338,43 @@ moduleChangeMagnitude (ModuleChanges unions aliases values binops) =
351 ]
338 ]
352
339
353
340
354−changeMagnitude :: Changes k v -> Magnitude
341+changeMagnitude :: Changes k v -> M.Magnitude
355changeMagnitude (Changes added changed removed) =
342changeMagnitude (Changes added changed removed) =
356 if Map.size removed > 0 || Map.size changed > 0 then
343 if Map.size removed > 0 || Map.size changed > 0 then
357− MAJOR
344+ M.MAJOR
358
345
359 else if Map.size added > 0 then
346 else if Map.size added > 0 then
360− MINOR
347+ M.MINOR
361
348
362 else
349 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