@@ -10,6 +10,7 @@ import Control.Monad (filterM, void)
10import Control.Monad.Trans (liftIO)
10import Control.Monad.Trans (liftIO)
11import qualified Data.Map as Map
11import qualified Data.Map as Map
12import qualified Data.Set as Set
12import qualified Data.Set as Set
13+import qualified Data.Map.Merge.Strict as Map
13import Data.Map (Map)
14import Data.Map (Map)
14import Data.Set (Set)
15import Data.Set (Set)
15import System.Directory (doesDirectoryExist)
16import System.Directory (doesDirectoryExist)
@@ -65,7 +66,7 @@ throw exit =
68−-- VERIFY SOLUTION
69+-- VERIFY APP
71verifyApp :: AppInfo -> Task.Task (Map Name Version)
72verifyApp :: AppInfo -> Task.Task (Map Name Version)
@@ -74,7 +75,7 @@ verifyApp info =
74 throw (E.AppBadElm (_app_elm_version info))
75 throw (E.AppBadElm (_app_elm_version info))
77− do let oldSolution = Project.appSolution info
78+ do oldSolution <- appToSolution info
78 let solver = Solver.solve (Map.map Con.exactly oldSolution)
79 let solver = Solver.solve (Map.map Con.exactly oldSolution)
79 registry <- Cache.optionalUpdate
80 registry <- Cache.optionalUpdate
80 maybeSolution <- Explorer.run registry (Solver.run solver)
81 maybeSolution <- Explorer.run registry (Solver.run solver)
@@ -89,13 +90,17 @@ verifyApp info =
89 throw (E.AppMissingTrans (Map.toList (Map.difference newSolution oldSolution)))
90 throw (E.AppMissingTrans (Map.toList (Map.difference newSolution oldSolution)))
92verifyPkg :: PkgInfo -> Task.Task (Map Name Version)
97verifyPkg :: PkgInfo -> Task.Task (Map Name Version)
93verifyPkg info =
98verifyPkg info =
94 if not (Con.goodElm (_pkg_elm_version info)) then
99 if not (Con.goodElm (_pkg_elm_version info)) then
95 throw (E.PkgBadElm (_pkg_elm_version info))
100 throw (E.PkgBadElm (_pkg_elm_version info))
98− do let deps = Map.union (_pkg_deps info) (_pkg_test_deps info)
103+ do deps <- union noDups (_pkg_deps info) (_pkg_test_deps info)
99 let solver = Solver.solve deps
104 let solver = Solver.solve deps
100 registry <- Cache.optionalUpdate
105 registry <- Cache.optionalUpdate
101 maybeSolution <- Explorer.run registry (Solver.run solver)
106 maybeSolution <- Explorer.run registry (Solver.run solver)
@@ -108,6 +113,35 @@ verifyPkg info =
119+appToSolution :: Project.AppInfo -> Task.Task (Map Name Version)
120+appToSolution (Project.AppInfo _ _ depsDirect depsTrans testDirect testTrans) =
121+ do a <- union allowEqualDups depsTrans testDirect
122+ b <- union noDups depsDirect testTrans
126+noDups :: Name -> a -> a -> Task.Task a
131+allowEqualDups :: Name -> Version -> Version -> Task.Task Version
132+allowEqualDups _ v1 v2 =
139+union :: (Name -> a -> a -> Task.Task a) -> Map Name a -> Map Name a -> Task.Task (Map Name a)
140+union tieBreaker deps1 deps2 =
141+ Map.mergeA Map.preserveMissing Map.preserveMissing (Map.zipWithAMatched tieBreaker) deps1 deps2
111-- VERIFY ARTIFACTS
145-- VERIFY ARTIFACTS