never executed always true always false
1 {-# LANGUAGE DeriveGeneric #-}
2 -----------------------------------------------------------------------------
3 -- |
4 -- Module : Distribution.Client.BuildReports.Types
5 -- Copyright : (c) Duncan Coutts 2009
6 -- License : BSD-like
7 --
8 -- Maintainer : cabal-devel@haskell.org
9 -- Portability : portable
10 --
11 -- Types related to build reporting
12 --
13 -----------------------------------------------------------------------------
14 module Distribution.Client.BuildReports.Types (
15 ReportLevel(..),
16 BuildReport (..),
17 InstallOutcome(..),
18 Outcome(..),
19 ) where
20
21 import Distribution.Client.Compat.Prelude
22 import Prelude ()
23
24 import qualified Distribution.Compat.CharParsing as P
25 import qualified Text.PrettyPrint as Disp
26
27 import Distribution.Compiler (CompilerId (..))
28 import Distribution.PackageDescription (FlagAssignment)
29 import Distribution.System (Arch, OS)
30 import Distribution.Types.PackageId (PackageIdentifier)
31
32 -------------------------------------------------------------------------------
33 -- ReportLevel
34 -------------------------------------------------------------------------------
35
36 data ReportLevel = NoReports | AnonymousReports | DetailedReports
37 deriving (Eq, Ord, Enum, Bounded, Show, Generic)
38
39 instance Binary ReportLevel
40 instance Structured ReportLevel
41
42 instance Pretty ReportLevel where
43 pretty NoReports = Disp.text "none"
44 pretty AnonymousReports = Disp.text "anonymous"
45 pretty DetailedReports = Disp.text "detailed"
46
47 instance Parsec ReportLevel where
48 parsec = do
49 name <- P.munch1 isAlpha
50 case lowercase name of
51 "none" -> return NoReports
52 "anonymous" -> return AnonymousReports
53 "detailed" -> return DetailedReports
54 _ -> P.unexpected $ "ReportLevel: " ++ name
55
56 lowercase :: String -> String
57 lowercase = map toLower
58
59 -------------------------------------------------------------------------------
60 -- BuildReport
61 -------------------------------------------------------------------------------
62
63 data BuildReport = BuildReport {
64 -- | The package this build report is about
65 package :: PackageIdentifier,
66
67 -- | The OS and Arch the package was built on
68 os :: OS,
69 arch :: Arch,
70
71 -- | The Haskell compiler (and hopefully version) used
72 compiler :: CompilerId,
73
74 -- | The uploading client, ie cabal-install-x.y.z
75 client :: PackageIdentifier,
76
77 -- | Which configurations flags we used
78 flagAssignment :: FlagAssignment,
79
80 -- | Which dependent packages we were using exactly
81 dependencies :: [PackageIdentifier],
82
83 -- | Did installing work ok?
84 installOutcome :: InstallOutcome,
85
86 -- Which version of the Cabal library was used to compile the Setup.hs
87 -- cabalVersion :: Version,
88
89 -- Which build tools we were using (with versions)
90 -- tools :: [PackageIdentifier],
91
92 -- | Configure outcome, did configure work ok?
93 docsOutcome :: Outcome,
94
95 -- | Configure outcome, did configure work ok?
96 testsOutcome :: Outcome
97 }
98 deriving (Eq, Show, Generic)
99
100
101
102 -------------------------------------------------------------------------------
103 -- InstallOutcome
104 -------------------------------------------------------------------------------
105
106 data InstallOutcome
107 = PlanningFailed
108 | DependencyFailed PackageIdentifier
109 | DownloadFailed
110 | UnpackFailed
111 | SetupFailed
112 | ConfigureFailed
113 | BuildFailed
114 | TestsFailed
115 | InstallFailed
116 | InstallOk
117 deriving (Eq, Show, Generic)
118
119 instance Pretty InstallOutcome where
120 pretty PlanningFailed = Disp.text "PlanningFailed"
121 pretty (DependencyFailed pkgid) = Disp.text "DependencyFailed" <+> pretty pkgid
122 pretty DownloadFailed = Disp.text "DownloadFailed"
123 pretty UnpackFailed = Disp.text "UnpackFailed"
124 pretty SetupFailed = Disp.text "SetupFailed"
125 pretty ConfigureFailed = Disp.text "ConfigureFailed"
126 pretty BuildFailed = Disp.text "BuildFailed"
127 pretty TestsFailed = Disp.text "TestsFailed"
128 pretty InstallFailed = Disp.text "InstallFailed"
129 pretty InstallOk = Disp.text "InstallOk"
130
131 instance Parsec InstallOutcome where
132 parsec = do
133 name <- P.munch1 isAlpha
134 case name of
135 "PlanningFailed" -> return PlanningFailed
136 "DependencyFailed" -> DependencyFailed <$ P.spaces <*> parsec
137 "DownloadFailed" -> return DownloadFailed
138 "UnpackFailed" -> return UnpackFailed
139 "SetupFailed" -> return SetupFailed
140 "ConfigureFailed" -> return ConfigureFailed
141 "BuildFailed" -> return BuildFailed
142 "TestsFailed" -> return TestsFailed
143 "InstallFailed" -> return InstallFailed
144 "InstallOk" -> return InstallOk
145 _ -> P.unexpected $ "InstallOutcome: " ++ name
146
147 -------------------------------------------------------------------------------
148 -- Outcome
149 -------------------------------------------------------------------------------
150
151 data Outcome = NotTried | Failed | Ok
152 deriving (Eq, Show, Enum, Bounded, Generic)
153
154 instance Pretty Outcome where
155 pretty NotTried = Disp.text "NotTried"
156 pretty Failed = Disp.text "Failed"
157 pretty Ok = Disp.text "Ok"
158
159 instance Parsec Outcome where
160 parsec = do
161 name <- P.munch1 isAlpha
162 case name of
163 "NotTried" -> return NotTried
164 "Failed" -> return Failed
165 "Ok" -> return Ok
166 _ -> P.unexpected $ "Outcome: " ++ name