[commit: Cabal] master: Complete the implementation of --build-summary=TEMPLATE (0a6fdc8)
Ian Lynagh
igloo at earth.li
Fri Jun 24 02:02:44 CEST 2011
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 <duncan at haskell.org>
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 at 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
More information about the Cvs-libraries
mailing list