From e97ac30568e3753d97b4dabb5e44bd360ee62bad Mon Sep 17 00:00:00 2001 From: Michael Snoyman Date: Sun, 7 Dec 2014 13:04:02 +0200 Subject: [PATCH] More informative error messages --- Stackage2/CheckBuildPlan.hs | 41 ++++++++++++++++++++++++++------- test/Stackage2/BuildPlanSpec.hs | 1 + 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/Stackage2/CheckBuildPlan.hs b/Stackage2/CheckBuildPlan.hs index 44b96788..332ea680 100644 --- a/Stackage2/CheckBuildPlan.hs +++ b/Stackage2/CheckBuildPlan.hs @@ -37,10 +37,36 @@ checkDeps allPackages (user, pb) = (dep, Just version) errMap where - errMap = singletonMap (user, pbVersion pb) range + errMap = singletonMap pu range + pu = PkgUser + { puName = user + , puVersion = pbVersion pb + , puMaintainer = pbMaintainer pb + , puGithubPings = pbGithubPings pb + } + +data PkgUser = PkgUser + { puName :: PackageName + , puVersion :: Version + , puMaintainer :: Maybe Maintainer + , puGithubPings :: Set Text + } + deriving (Eq, Ord) + +pkgUserShow1 :: PkgUser -> String +pkgUserShow1 PkgUser {..} = concat + [ display puName + , "-" + , display puVersion + ] + +pkgUserShow2 :: PkgUser -> String +pkgUserShow2 PkgUser {..} = unwords + $ (maybe "No maintainer" (unpack . unMaintainer) puMaintainer ++ ".") + : map (("@" ++) . unpack) (setToList puGithubPings) newtype BadBuildPlan = - BadBuildPlan (Map (PackageName, Maybe Version) (Map (PackageName, Version) VersionRange)) -- FIXME add maintainer and Github ping info + BadBuildPlan (Map (PackageName, Maybe Version) (Map PkgUser VersionRange)) deriving Typeable instance Exception BadBuildPlan instance Show BadBuildPlan where @@ -60,15 +86,14 @@ instance Show BadBuildPlan where , " depended on by:" ] - showUser :: ((PackageName, Version), VersionRange) -> String - showUser ((user, version), range) = concat + showUser :: (PkgUser, VersionRange) -> String + showUser (pu, range) = concat [ "- " - , display user - , "-" - , display version + , pkgUserShow1 pu , " (" , display range - , ")" + , "). " + , pkgUserShow2 pu ] instance Monoid BadBuildPlan where diff --git a/test/Stackage2/BuildPlanSpec.hs b/test/Stackage2/BuildPlanSpec.hs index be7f31dc..b4b42aac 100644 --- a/test/Stackage2/BuildPlanSpec.hs +++ b/test/Stackage2/BuildPlanSpec.hs @@ -12,4 +12,5 @@ spec = it "works" $ do bp <- newBuildPlan let bs = Y.encode bp mbp' = Y.decode bs + Y.encodeFile "myplan.yaml" bp mbp' `shouldBe` Just (() <$ bp)