Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/0a6fdc8293f6a3720a889d29752ed13d4f02c693

>---------------------------------------------------------------

commit 0a6fdc8293f6a3720a889d29752ed13d4f02c693
Author: Duncan Coutts <[email protected]>
Date:   Sun Feb 15 19:02:54 2009 +0000

    Complete the implementation of --build-summary=TEMPLATE
    Actually respect the new flag. It's actually a list of template files
    and all specified files get written to. This allows us to specify
    a default build log file and also have the user write to extra ones.
    The summary file template can contain $pkgid $compiler etc.

>---------------------------------------------------------------

 .../Distribution/Client/BuildReports/Storage.hs    |   37 +++++++++++++------
 cabal-install/Distribution/Client/Install.hs       |   10 +++--
 2 files changed, 31 insertions(+), 16 deletions(-)

diff --git a/cabal-install/Distribution/Client/BuildReports/Storage.hs 
b/cabal-install/Distribution/Client/BuildReports/Storage.hs
index 9a1253e..1525f8e 100644
--- a/cabal-install/Distribution/Client/BuildReports/Storage.hs
+++ b/cabal-install/Distribution/Client/BuildReports/Storage.hs
@@ -31,9 +31,10 @@ import Distribution.Client.Types
 import qualified Distribution.Client.InstallPlan as InstallPlan
 import Distribution.Client.InstallPlan
          ( InstallPlan, PlanPackage )
-import Distribution.Client.Config
-         ( defaultLogsDir )
 
+import Distribution.Simple.InstallDirs
+         ( PathTemplate, fromPathTemplate
+         , initialPathTemplateEnv, substPathTemplate )
 import Distribution.System
          ( Platform(Platform) )
 import Distribution.Compiler
@@ -46,7 +47,7 @@ import Data.List
 import Data.Maybe
          ( catMaybes )
 import System.FilePath
-         ( (</>) )
+         ( (</>), takeDirectory )
 import System.Directory
          ( createDirectoryIfMissing )
 
@@ -75,18 +76,30 @@ storeAnonymous reports = sequence_
       [ (report, repo, remoteRepo)
       | (report, repo@Repo { repoKind = Left remoteRepo }) <- rs ]
 
-storeLocal :: [(BuildReport, Repo)] -> IO ()
-storeLocal reports = do
-  logsDir <- defaultLogsDir
-  let file = logsDir </> "build.log"
-  createDirectoryIfMissing True logsDir
-  appendFile file (concatMap (format . fst) reports)
-  --TODO: make this concurrency safe, either lock the report file or make sure
-  -- the writes for each report are atomic (under 4k and flush at boundaries)
-
+storeLocal :: [PathTemplate] -> [(BuildReport, Repo)] -> IO ()
+storeLocal templates reports = sequence_
+  [ do createDirectoryIfMissing True (takeDirectory file)
+       appendFile file output
+       --TODO: make this concurrency safe, either lock the report file or make
+       --      sure the writes for each report are atomic
+  | (file, reports') <- groupByFileName
+                          [ (reportFileName template report, report)
+                          | template <- templates
+                          , (report, _repo) <- reports ]
+  , let output = concatMap format reports'
+  ]
   where
     format r = '\n' : BuildReport.show r ++ "\n"
 
+    reportFileName template report =
+        fromPathTemplate (substPathTemplate env template)
+      where env = initialPathTemplateEnv
+                    (BuildReport.package  report)
+                    (BuildReport.compiler report)
+
+    groupByFileName = map (\grp@((filename,_):_) -> (filename, map snd grp))
+                    . groupBy (equating  fst)
+                    . sortBy  (comparing fst)
 
 -- ------------------------------------------------------------
 -- * InstallPlan support
diff --git a/cabal-install/Distribution/Client/Install.hs 
b/cabal-install/Distribution/Client/Install.hs
index a8d1adc..ecad779 100644
--- a/cabal-install/Distribution/Client/Install.hs
+++ b/cabal-install/Distribution/Client/Install.hs
@@ -211,11 +211,14 @@ installWithPlanner planner verbosity packageDB repos comp 
conf
                                        miscOptions configFlags' installFlags
                                        compid pkg mpath (useLogFile logsDir)
 
+        -- build reporting, local and remote
         let buildReports = BuildReports.fromInstallPlan installPlan'
-        BuildReports.storeAnonymous buildReports
-        BuildReports.storeLocal     buildReports
-        when useDetailedBuildReports $
+        BuildReports.storeLocal (installSummaryFile installFlags) buildReports
+        when (reportingLevel >= AnonymousReports) $
+          BuildReports.storeAnonymous buildReports
+        when (reportingLevel == DetailedReports) $
           storeDetailedBuildReports verbosity logsDir buildReports
+
         symlinkBinaries verbosity configFlags installFlags installPlan'
         printBuildFailures installPlan'
 
@@ -239,7 +242,6 @@ installWithPlanner planner verbosity packageDB repos comp 
conf
       useLoggingHandle = Nothing,
       useWorkingDir    = Nothing
     }
-    useDetailedBuildReports = reportingLevel == DetailedReports
     reportingLevel = fromFlagOrDefault NoReports (installBuildReports 
installFlags)
     useLogFile :: FilePath -> Maybe (PackageIdentifier -> FilePath)
     useLogFile logsDir = fmap substLogFileName logFileTemplate



_______________________________________________
Cvs-libraries mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-libraries

Reply via email to