Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal On branch : master
http://hackage.haskell.org/trac/ghc/changeset/b4c8ba009aa74cd2c470f9cd6500390a4f3f9770 >--------------------------------------------------------------- commit b4c8ba009aa74cd2c470f9cd6500390a4f3f9770 Author: Duncan Coutts <[email protected]> Date: Tue Jun 10 01:37:04 2008 +0000 Fix parsing of build reports and add a function to parse a whole logfile of reports >--------------------------------------------------------------- cabal-install/Hackage/Reporting.hs | 23 +++++++++++++++++++---- 1 files changed, 19 insertions(+), 4 deletions(-) diff --git a/cabal-install/Hackage/Reporting.hs b/cabal-install/Hackage/Reporting.hs index 0379ae3..bc0e37d 100644 --- a/cabal-install/Hackage/Reporting.hs +++ b/cabal-install/Hackage/Reporting.hs @@ -23,6 +23,7 @@ module Hackage.Reporting ( -- * parsing and pretty printing parseBuildReport, + parseBuildReports, showBuildReport, -- * 'InstallPlan' variants @@ -59,10 +60,12 @@ import Distribution.Text import Distribution.ParseUtils ( FieldDescr(..), ParseResult(..), simpleField, listField ) import qualified Distribution.Compat.ReadP as Parse - ( ReadP, pfail, munch1, char, option ) + ( ReadP, pfail, munch1, char, option, skipSpaces ) import Text.PrettyPrint.HughesPJ as Disp ( Doc, char, text, (<+>), (<>) ) +import Data.List + ( unfoldr ) import Data.Maybe ( catMaybes ) import Data.Char as Char @@ -160,8 +163,8 @@ initialBuildReport = BuildReport { os = requiredField "os", arch = requiredField "arch", compiler = requiredField "compiler", - flagAssignment = requiredField "flags", - dependencies = requiredField "dependencies", + flagAssignment = [], + dependencies = [], installOutcome = requiredField "install-outcome", -- cabalVersion = Nothing, -- tools = [], @@ -177,6 +180,17 @@ initialBuildReport = BuildReport { parseBuildReport :: String -> ParseResult BuildReport parseBuildReport = parseBasicStanza fieldDescrs initialBuildReport +parseBuildReports :: String -> [BuildReport] +parseBuildReports str = + [ report | ParseOk [] report <- map parseBuildReport (split str) ] + + where + split :: String -> [String] + split = filter (not . null) . unfoldr chunk . lines + chunk [] = Nothing + chunk ls = case break null ls of + (r, rs) -> Just (unlines r, dropWhile null rs) + -- ----------------------------------------------------------------------------- -- Pretty-printing @@ -233,7 +247,8 @@ instance Text InstallOutcome where parse = do name <- Parse.munch1 Char.isAlphaNum case name of - "DependencyFailed" -> do pkgid <- parse + "DependencyFailed" -> do Parse.skipSpaces + pkgid <- parse return (DependencyFailed pkgid) "DownloadFailed" -> return DownloadFailed "UnpackFailed" -> return UnpackFailed _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
