[commit: Cabal] master: Automatically run test suites when invoked with 'cabal install --enable-tests'. Do not install if tests fail. (38d0125)
Ian Lynagh
igloo at earth.li
Fri Feb 17 20:34:07 CET 2012
Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/38d01256923ff674e1c1d1e2e7333fb36a7b718e
>---------------------------------------------------------------
commit 38d01256923ff674e1c1d1e2e7333fb36a7b718e
Author: Thomas Tuegel <ttuegel at gmail.com>
Date: Sat Feb 4 20:22:58 2012 +0000
Automatically run test suites when invoked with 'cabal install --enable-tests'. Do not install if tests fail.
>---------------------------------------------------------------
.../Distribution/Client/BuildReports/Anonymous.hs | 4 ++-
cabal-install/Distribution/Client/Install.hs | 27 +++++++++++++------
cabal-install/Distribution/Client/Types.hs | 3 +-
3 files changed, 23 insertions(+), 11 deletions(-)
diff --git a/cabal-install/Distribution/Client/BuildReports/Anonymous.hs b/cabal-install/Distribution/Client/BuildReports/Anonymous.hs
index 01d4118..93b31cf 100644
--- a/cabal-install/Distribution/Client/BuildReports/Anonymous.hs
+++ b/cabal-install/Distribution/Client/BuildReports/Anonymous.hs
@@ -112,6 +112,7 @@ data InstallOutcome
| SetupFailed
| ConfigureFailed
| BuildFailed
+ | TestsFailed
| InstallFailed
| InstallOk
deriving Eq
@@ -143,6 +144,7 @@ new os' arch' comp (ConfiguredPackage pkg flags _ deps) result =
Left (BR.UnpackFailed _) -> UnpackFailed
Left (BR.ConfigureFailed _) -> ConfigureFailed
Left (BR.BuildFailed _) -> BuildFailed
+ Left (BR.TestsFailed _) -> TestsFailed
Left (BR.InstallFailed _) -> InstallFailed
Right (BR.BuildOk _ _) -> InstallOk
convertDocsOutcome = case result of
@@ -151,9 +153,9 @@ new os' arch' comp (ConfiguredPackage pkg flags _ deps) result =
Right (BR.BuildOk BR.DocsFailed _) -> Failed
Right (BR.BuildOk BR.DocsOk _) -> Ok
convertTestsOutcome = case result of
+ Left (BR.TestsFailed _) -> Failed
Left _ -> NotTried
Right (BR.BuildOk _ BR.TestsNotTried) -> NotTried
- Right (BR.BuildOk _ BR.TestsFailed) -> Failed
Right (BR.BuildOk _ BR.TestsOk) -> Ok
cabalInstallID :: PackageIdentifier
diff --git a/cabal-install/Distribution/Client/Install.hs b/cabal-install/Distribution/Client/Install.hs
index fae3f68..b16f0e6 100644
--- a/cabal-install/Distribution/Client/Install.hs
+++ b/cabal-install/Distribution/Client/Install.hs
@@ -91,7 +91,8 @@ import Distribution.Simple.Setup
, buildCommand, BuildFlags(..), emptyBuildFlags
, toFlag, fromFlag, fromFlagOrDefault, flagToMaybe )
import qualified Distribution.Simple.Setup as Cabal
- ( installCommand, InstallFlags(..), emptyInstallFlags )
+ ( installCommand, InstallFlags(..), emptyInstallFlags
+ , emptyTestFlags, testCommand )
import Distribution.Simple.Utils
( rawSystemExit, comparing )
import Distribution.Simple.InstallDirs as InstallDirs
@@ -675,6 +676,8 @@ printBuildFailures plan =
++ " The exception was:\n " ++ show e
BuildFailed e -> " failed during the building phase."
++ " The exception was:\n " ++ show e
+ TestsFailed e -> " failed during the tests phase."
+ ++ " The exception was:\n " ++ show e
InstallFailed e -> " failed during the final install step."
++ " The exception was:\n " ++ show e
@@ -891,15 +894,19 @@ installUnpackedPackage verbosity scriptOptions miscOptions
else return DocsNotTried
-- Tests phase
- testsResult <- return TestsNotTried --TODO: add optional tests
+ onFailure TestsFailed $ do
+ when shouldTest $ setup Cabal.testCommand testFlags
+
+ let testsResult | shouldTest = TestsOk
+ | otherwise = TestsNotTried
- -- Install phase
- onFailure InstallFailed $
- withWin32SelfUpgrade verbosity configFlags compid pkg $ do
- case rootCmd miscOptions of
- (Just cmd) -> reexec cmd
- Nothing -> setup Cabal.installCommand installFlags
- return (Right (BuildOk docsResult testsResult))
+ -- Install phase
+ onFailure InstallFailed $
+ withWin32SelfUpgrade verbosity configFlags compid pkg $ do
+ case rootCmd miscOptions of
+ (Just cmd) -> reexec cmd
+ Nothing -> setup Cabal.installCommand installFlags
+ return (Right (BuildOk docsResult testsResult))
where
configureFlags = filterConfigureFlags configFlags {
@@ -914,6 +921,8 @@ installUnpackedPackage verbosity scriptOptions miscOptions
haddockFlags' _ = haddockFlags {
haddockVerbosity = toFlag verbosity'
}
+ shouldTest = fromFlag (configTests configFlags)
+ testFlags _ = Cabal.emptyTestFlags
installFlags _ = Cabal.emptyInstallFlags {
Cabal.installDistPref = configDistPref configFlags,
Cabal.installVerbosity = toFlag verbosity'
diff --git a/cabal-install/Distribution/Client/Types.hs b/cabal-install/Distribution/Client/Types.hs
index 534ffdc..4f0376d 100644
--- a/cabal-install/Distribution/Client/Types.hs
+++ b/cabal-install/Distribution/Client/Types.hs
@@ -179,8 +179,9 @@ data BuildFailure = DependentFailed PackageId
| UnpackFailed SomeException
| ConfigureFailed SomeException
| BuildFailed SomeException
+ | TestsFailed SomeException
| InstallFailed SomeException
data BuildSuccess = BuildOk DocsResult TestsResult
data DocsResult = DocsNotTried | DocsFailed | DocsOk
-data TestsResult = TestsNotTried | TestsFailed | TestsOk
+data TestsResult = TestsNotTried | TestsOk
More information about the Cvs-libraries
mailing list