on master help sign in
Better bad version output
7122851Michael Snoyman
Stackage/InstallInfo.hs+26−9
@@ -8,7 +8,8 @@ import Control.Monad (forM_)
8import qualified Data.Map as Map
8import qualified Data.Map as Map
9import qualified Data.Set as Set
9import qualified Data.Set as Set
10import Data.Version (showVersion)
10import Data.Version (showVersion)
11+import qualified Distribution.Text
11−import Distribution.Version (withinRange)
12+import Distribution.Version (withinRange, simplifyVersionRange)
12import Stackage.Config
13import Stackage.Config
13import Stackage.HaskellPlatform
14import Stackage.HaskellPlatform
14import Stackage.LoadDatabase
15import Stackage.LoadDatabase
@@ -40,9 +41,15 @@ getInstallInfo settings = do
40 badVersions
41 badVersions
41 | Map.null badVersions -> return ()
42 | Map.null badVersions -> return ()
42 | otherwise -> do
43 | otherwise -> do
43− forM_ (Map.toList badVersions) $ \(PackageName user, badDeps) -> do
44+ forM_ (Map.toList badVersions) $ \(user, badDeps) -> do
44 putStrLn $ user ++ " cannot use: "
45 putStrLn $ user ++ " cannot use: "
45− mapM_ (putStrLn . packageVersionString) $ Map.toList badDeps
46+ forM_ (Map.toList badDeps) $ \(name, (version, range)) -> do
47+ putStrLn $ concat
48+ [ "- "
49+ , packageVersionString (name, version)
50+ , " -- "
51+ , Distribution.Text.display $ simplifyVersionRange range
52+ ]
46 putStrLn ""
53 putStrLn ""
47
54
48 error "Conflicting build plan, exiting"
55 error "Conflicting build plan, exiting"
@@ -75,16 +82,26 @@ iiPackageList = map packageVersionString . Map.toList . Map.map fst . iiPackages
75-- | Check for internal mismatches in required and actual package versions.
82-- | Check for internal mismatches in required and actual package versions.
76checkBadVersions :: BuildSettings
83checkBadVersions :: BuildSettings
77 -> Map PackageName BuildInfo
84 -> Map PackageName BuildInfo
78− -> Map PackageName (Map PackageName Version)
85+ -> Map String (Map PackageName (Version, VersionRange))
79checkBadVersions settings buildPlan =
86checkBadVersions settings buildPlan =
80− Map.filter (not . Map.null) $ Map.map getBadVersions $ Map.filterWithKey unexpectedFailure buildPlan
87+ Map.unions $ map getBadVersions $ Map.toList $ Map.filterWithKey unexpectedFailure buildPlan
81 where
88 where
82 unexpectedFailure name _ = name `Set.notMember` expectedFailures settings
89 unexpectedFailure name _ = name `Set.notMember` expectedFailures settings
83
90
84− getBadVersions :: BuildInfo -> Map PackageName Version
91+ getBadVersions :: (PackageName, BuildInfo) -> Map String (Map PackageName (Version, VersionRange))
92+ getBadVersions (name, bi)
93+ | Map.null badVersions = Map.empty
94+ | otherwise = Map.singleton display badVersions
95+ where
85− getBadVersions = Map.unions . map (uncurry checkPackage) . Map.toList . biDeps
96+ badVersions = Map.unions $ map (uncurry checkPackage) $ Map.toList $ biDeps bi
97+ display = concat
98+ [ packageVersionString (name, biVersion bi)
99+ , " ("
100+ , unMaintainer $ biMaintainer bi
101+ , ")"
102+ ]
86
103
87− checkPackage :: PackageName -> VersionRange -> Map PackageName Version
104+ checkPackage :: PackageName -> VersionRange -> Map PackageName (Version, VersionRange)
88 checkPackage name vr =
105 checkPackage name vr =
89 case Map.lookup name buildPlan of
106 case Map.lookup name buildPlan of
90 -- Can't find the dependency. Could be part of core, so just ignore
107 -- Can't find the dependency. Could be part of core, so just ignore
@@ -92,4 +109,4 @@ checkBadVersions settings buildPlan =
92 Nothing -> Map.empty
109 Nothing -> Map.empty
93 Just bi
110 Just bi
94 | biVersion bi `withinRange` vr -> Map.empty
111 | biVersion bi `withinRange` vr -> Map.empty
95− | otherwise -> Map.singleton name $ biVersion bi
112+ | otherwise -> Map.singleton name (biVersion bi, vr)