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

On branch  : 

http://hackage.haskell.org/trac/ghc/changeset/a73eb4fc56aeefd3e59e58f1610dbe3701584245

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

commit a73eb4fc56aeefd3e59e58f1610dbe3701584245
Author: Duncan Coutts <[email protected]>
Date:   Tue Oct 7 23:06:35 2008 +0000

    Handle build reports with missing logs better

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

 cabal-install/Distribution/Client/Install.hs |   52 ++++++++++++++++++--------
 1 files changed, 36 insertions(+), 16 deletions(-)

diff --git a/cabal-install/Distribution/Client/Install.hs 
b/cabal-install/Distribution/Client/Install.hs
index 6d9ce58..d897342 100644
--- a/cabal-install/Distribution/Client/Install.hs
+++ b/cabal-install/Distribution/Client/Install.hs
@@ -18,17 +18,19 @@ module Distribution.Client.Install (
 import Data.List
          ( unfoldr, find, nub, sort )
 import Data.Maybe
-         ( isJust )
+         ( isJust, fromMaybe )
 import Control.Exception as Exception
-         ( handle, Exception )
+         ( handle, handleJust, Exception(IOException) )
 import Control.Monad
-         ( when, unless, forM_ )
+         ( when, unless )
 import System.Directory
          ( getTemporaryDirectory, doesFileExist, createDirectoryIfMissing )
 import System.FilePath
          ( (</>), (<.>), takeDirectory )
 import System.IO
          ( openFile, IOMode(AppendMode) )
+import System.IO.Error
+         ( isDoesNotExistError, ioeGetFileName )
 
 import Distribution.Client.Dependency
          ( resolveDependenciesWithProgress
@@ -193,7 +195,7 @@ installWithPlanner planner verbosity packageDB repos comp 
conf configFlags insta
         BuildReports.storeAnonymous buildReports
         BuildReports.storeLocal     buildReports
         when useDetailedBuildReports $
-          storeDetailedBuildReports logsDir buildReports
+          storeDetailedBuildReports verbosity logsDir buildReports
         symlinkBinaries verbosity configFlags installFlags installPlan'
         printBuildFailures installPlan'
 
@@ -229,19 +231,37 @@ installWithPlanner planner verbosity packageDB repos comp 
conf configFlags insta
       libVersion = Cabal.flagToMaybe (installCabalVersion installFlags)
     }
 
-storeDetailedBuildReports :: FilePath -> [(BuildReports.BuildReport, Repo)] -> 
IO ()
-storeDetailedBuildReports logsDir reports
-    = forM_ reports $ \(report,repo) ->
-      do buildLog <- readFile (logsDir </> display (BuildReports.package 
report) <.> "log")
-         case repoKind repo of
-           Left remoteRepo
-                -> do dotCabal <- defaultCabalDir
-                      let destDir = dotCabal </> "reports" </> remoteRepoName 
remoteRepo
-                          dest = destDir </> display (BuildReports.package 
report) <.> "log"
-                      createDirectoryIfMissing True destDir -- FIXME
-                      writeFile dest (show (BuildReports.show report, 
buildLog))
-           Right{} -> return ()
+storeDetailedBuildReports :: Verbosity -> FilePath
+                          -> [(BuildReports.BuildReport, Repo)] -> IO ()
+storeDetailedBuildReports verbosity logsDir reports = sequence_
+  [ do dotCabal <- defaultCabalDir
+       let logFileName = display (BuildReports.package report) <.> "log"
+           logFile     = logsDir </> logFileName
+           reportsDir  = dotCabal </> "reports" </> remoteRepoName remoteRepo
+           reportFile  = reportsDir </> logFileName
          
+       handleMissingLogFile $ do
+         buildLog <- readFile logFile
+         createDirectoryIfMissing True reportsDir -- FIXME
+         writeFile reportFile (show (BuildReports.show report, buildLog))
+
+  | (report, Repo { repoKind = Left remoteRepo }) <- reports
+  , isLikelyToHaveLogFile (BuildReports.installOutcome report) ]
+
+  where
+    isLikelyToHaveLogFile BuildReports.ConfigureFailed {} = True
+    isLikelyToHaveLogFile BuildReports.BuildFailed     {} = True
+    isLikelyToHaveLogFile BuildReports.InstallFailed   {} = True
+    isLikelyToHaveLogFile BuildReports.InstallOk       {} = True
+    isLikelyToHaveLogFile _                               = False
+
+    handleMissingLogFile = Exception.handleJust missingFile $ \ioe ->
+      warn verbosity $ "Missing log file for build report: "
+                    ++ fromMaybe ""  (ioeGetFileName ioe)
+
+    missingFile (IOException ioe)
+      | isDoesNotExistError ioe  = Just ioe
+    missingFile _                = Nothing
 
 -- | Make an 'InstallPlan' for the unpacked package in the current directory,
 -- and all its dependencies.



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

Reply via email to