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