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

Reply via email to