[commit: Cabal] master: Fix parsing of build reports (1dc9333)
Ian Lynagh
igloo at earth.li
Fri Jun 24 01:55:43 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/1dc9333f065cb47016c659702c485122b4dfda22
>---------------------------------------------------------------
commit 1dc9333f065cb47016c659702c485122b4dfda22
Author: Duncan Coutts <duncan at haskell.org>
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
More information about the Cvs-libraries
mailing list