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
