Merge remote-tracking branch 'origin/master' into persistent11

This commit is contained in:
Michael Snoyman 2012-12-02 10:50:48 +02:00
commit 4d6aab02d4
6 changed files with 114 additions and 153 deletions

View File

@ -1,5 +1,5 @@
name: yesod-core
version: 1.1.6
version: 1.1.6.1
license: MIT
license-file: LICENSE
author: Michael Snoyman <michael@snoyman.com>

View File

@ -1,5 +1,5 @@
name: yesod-platform
version: 1.1.4.1
version: 1.1.5
license: MIT
license-file: LICENSE
author: Michael Snoyman <michael@snoyman.com>
@ -14,82 +14,93 @@ homepage: http://www.yesodweb.com/
library
build-depends: base >= 4 && < 5
, SHA == 1.5.1
, ReadArgs == 1.2.1
, SHA == 1.6.1
, aeson == 0.6.0.2
, ansi-terminal == 0.5.5
, asn1-data == 0.7.1
, attoparsec == 0.10.2.0
, attoparsec-conduit == 0.5.0.2
, authenticate == 1.3.1.1
, attoparsec-conduit == 0.5.0.3
, authenticate == 1.3.2
, base-unicode-symbols == 0.2.2.4
, base64-bytestring == 1.0.0.0
, basic-prelude == 0.3.1.0
, blaze-builder == 0.3.1.0
, blaze-builder-conduit == 0.5.0.1
, blaze-html == 0.5.1.0
, blaze-markup == 0.5.1.1
, blaze-builder-conduit == 0.5.0.3
, blaze-html == 0.5.1.1
, blaze-markup == 0.5.1.2
, byteorder == 1.0.3
, case-insensitive == 0.4.0.3
, cereal == 0.3.5.2
, certificate == 1.2.8
, certificate == 1.3.3
, classy-prelude == 0.4.1
, classy-prelude-conduit == 0.4.1
, clientsession == 0.8.0.1
, conduit == 0.5.2.7
, conduit == 0.5.5
, cookie == 0.4.0.1
, cprng-aes == 0.2.4
, cpu == 0.1.1
, crypto-api == 0.10.2
, crypto-conduit == 0.4.0.1
, crypto-pubkey-types == 0.1.1
, cryptocipher == 0.3.5
, cryptohash == 0.7.5
, crypto-conduit == 0.4.1
, crypto-pubkey-types == 0.2.0
, cryptocipher == 0.3.6
, cryptohash == 0.7.9
, css-text == 0.1.1
, data-default == 0.5.0
, date-cache == 0.3.0
, dlist == 0.5
, email-validate == 0.2.8
, email-validate == 0.3.2
, entropy == 0.2.1
, failure == 0.2.0.1
, fast-logger == 0.3.1
, file-embed == 0.0.4.6
, filesystem-conduit == 0.5.0.1
, hamlet == 1.1.1
, filesystem-conduit == 0.5.0.2
, fsnotify == 0.0.4
, ghc-paths == 0.1.0.8
, hamlet == 1.1.1.1
, hashable == 1.1.2.5
, hjsmin == 0.1.3
, hspec == 1.3.0.1
, hspec-expectations == 0.3.0.2
, html-conduit == 0.1.0.2
, http-conduit == 1.6.1.2
, http-date == 0.0.2
, hspec == 1.4.2
, hspec-expectations == 0.3.0.3
, html-conduit == 0.1.0.4
, http-conduit == 1.8.4.3
, http-date == 0.0.3
, http-reverse-proxy == 0.1.0.6
, http-types == 0.7.3.0.1
, language-javascript == 0.5.6
, language-javascript == 0.5.7
, largeword == 1.0.3
, lifted-base == 0.2
, mime-mail == 0.4.1.2
, mime-types == 0.1.0.0
, monad-control == 0.3.1.4
, monad-logger == 0.2.1
, monad-logger == 0.2.3
, network-conduit == 0.6.1.1
, optparse-applicative == 0.4.2
, path-pieces == 0.1.2
, pem == 0.1.1
, persistent == 1.0.1.3
, persistent == 1.0.2.2
, persistent-template == 1.0.0.2
, pool-conduit == 0.1.0.3
, primitive == 0.5.0.1
, project-template == 0.1.0.1
, pureMD5 == 2.1.2.1
, pwstore-fast == 2.3
, ranges == 0.2.4
, resource-pool == 0.2.1.1
, resourcet == 0.4.0.2
, resourcet == 0.4.4
, safe == 0.3.3
, semigroups == 0.8.4.1
, shakespeare == 1.0.1.4
, shakespeare-css == 1.0.1.5
, setenv == 0.1.0
, shakespeare == 1.0.2
, shakespeare-css == 1.0.2
, shakespeare-i18n == 1.0.0.2
, shakespeare-js == 1.0.0.6
, shakespeare-js == 1.1.0
, shakespeare-text == 1.0.0.5
, silently == 1.2.0.2
, silently == 1.2.4
, simple-sendfile == 0.2.8
, skein == 0.1.0.9
, skein == 0.1.0.10
, socks == 0.4.2
, split == 0.2.1.1
, stringsearch == 0.3.6.4
, system-fileio == 0.3.10
, system-filepath == 0.4.7
@ -97,8 +108,8 @@ library
, tagsoup == 0.12.8
, tagstream-conduit == 0.5.3
, tar == 0.4.0.1
, tls == 0.9.11
, tls-extra == 0.4.7
, tls == 1.0.2
, tls-extra == 0.5.0
, transformers-base == 0.4.1
, unix-compat == 0.4.0.0
, unordered-containers == 0.2.2.1
@ -108,27 +119,28 @@ library
, vector == 0.10.0.1
, void == 0.5.8
, wai == 1.3.0.1
, wai-app-static == 1.3.0.2
, wai-extra == 1.3.0.3
, wai-app-static == 1.3.0.4
, wai-extra == 1.3.0.4
, wai-logger == 0.3.0
, wai-test == 1.3.0
, warp == 1.3.4.1
, xml-conduit == 1.0.3.1
, warp == 1.3.5
, word8 == 0.0.2
, xml-conduit == 1.0.3.3
, xml-types == 0.3.3
, xss-sanitize == 0.3.2
, yaml == 0.8.1
, yesod == 1.1.2
, yesod-auth == 1.1.1.2
, yesod-core == 1.1.3.1
, yesod-default == 1.1.0.2
, yesod-form == 1.1.3
, yesod-json == 1.1.0
, yaml == 0.8.1.1
, yesod == 1.1.4.1
, yesod-auth == 1.1.2
, yesod-core == 1.1.6.1
, yesod-default == 1.1.2
, yesod-form == 1.2.0.1
, yesod-json == 1.1.2
, yesod-persistent == 1.1.0
, yesod-routes == 1.1.0.2
, yesod-static == 1.1.0.1
, yesod-test == 0.3.0.1
, zlib-bindings == 0.1.1.1
, zlib-conduit == 0.5.0.1
, yesod-routes == 1.1.1.1
, yesod-static == 1.1.1.1
, yesod-test == 0.3.1.1
, zlib-bindings == 0.1.1.2
, zlib-conduit == 0.5.0.3
exposed-modules: Yesod.Platform

View File

@ -65,22 +65,8 @@ module Yesod.Test (
where
-- In in Hspec < 1.3 the Example instance for IO () (== Assertion/Expectation)
-- is orphan and only export from Test.Hspec.HUnit.
--
-- In Hspec 1.3.* it is still orphan, but re-exported from Test.Hspec.
--
-- Starting with Hspec 1.4.0 it is not orphan anymore.
--
-- As we only support Hspec >= 1.3, we import Test.Hspec to bring the orphan
-- instance into scope. This is better than importing Test.Hspec.HUnit, as
-- Test.Hspec.HUnit may be removed in the future.
--
-- As soon as we decide to drop support for Hspec 1.3.*, we can remove this
-- comment and the following import.
import qualified Test.Hspec ()
import qualified Test.Hspec.Core as Core
import qualified Test.Hspec.Runner as Runner
import qualified Data.List as DL
import qualified Data.Maybe as DY
import qualified Data.ByteString.Char8 as BS8
@ -108,7 +94,7 @@ import Data.Conduit.Pool (Pool)
import Control.Monad.Trans.Control (MonadBaseControl)
-- | The state used in 'describe' to build a list of specs
data SpecsData conn = SpecsData Application (Pool conn) [Core.Spec]
data SpecsData conn = SpecsData Application (Pool conn) [Core.SpecTree]
-- | The specs state monad is where 'describe' runs.
-- parameterized by a database connection.
@ -156,7 +142,7 @@ type CookieValue = ByteString
runTests :: Application -> Pool conn -> SpecsConn conn -> IO ()
runTests app connection specsDef = do
(SpecsData _ _ specs) <- ST.execStateT specsDef (SpecsData app connection [])
Core.hspec specs
(Runner.hspec . Core.fromSpecList) specs
-- | Start describing a Tests suite keeping cookies and a reference to the tested 'Application'
-- and 'ConnectionPool'

View File

@ -23,7 +23,7 @@ library
, network >= 2.2
, http-types >= 0.7 && < 0.8
, HUnit >= 1.2 && < 1.3
, hspec >= 1.3
, hspec >= 1.4
, bytestring >= 0.9
, case-insensitive >= 0.2
, text

View File

@ -15,6 +15,7 @@ import qualified Distribution.Package as D
import qualified Distribution.PackageDescription as D
import qualified Distribution.PackageDescription.Parse as D
import qualified Distribution.Simple.Build as D
import qualified Distribution.Simple.Compiler as D
import qualified Distribution.Simple.Configure as D
import qualified Distribution.Simple.LocalBuildInfo as D
import qualified Distribution.Simple.Program as D
@ -28,11 +29,10 @@ import Control.Concurrent (forkIO, threadDelay)
import Control.Concurrent.MVar (MVar, newEmptyMVar,
takeMVar, tryPutMVar)
import qualified Control.Exception as Ex
import Control.Monad (unless, void,
when, forever)
import Control.Monad.Trans.State (evalStateT, get)
import Control.Monad (forever, unless, void,
when)
import Control.Monad.IO.Class (liftIO)
import Control.Monad.Trans.State (evalStateT, get)
import Data.Char (isNumber, isUpper)
import qualified Data.List as L
@ -49,22 +49,16 @@ import System.FilePath (dropExtension,
splitDirectories,
takeExtension, (</>))
import System.FSNotify
import System.IO (hClose, hGetLine,
hIsEOF, hPutStrLn,
stderr, stdout)
import System.IO.Error (isDoesNotExistError)
import System.Posix.Types (EpochTime)
import System.PosixCompat.Files (getFileStatus,
modificationTime)
import System.Process (ProcessHandle,
createProcess,
createProcess, env,
getProcessExitCode,
proc, rawSystem,
readProcess,
runInteractiveProcess,
proc, readProcess,
system,
terminateProcess,
env)
terminateProcess)
import System.Timeout (timeout)
import Build (getDeps, isNewerThan,
@ -73,13 +67,14 @@ import GhcBuild (buildPackage,
getBuildFlags)
import qualified Config as GHC
import SrcLoc (Located)
import Network.HTTP.ReverseProxy (waiProxyTo, ProxyDest (ProxyDest))
import Network (withSocketsDo)
import Network.Wai (responseLBS)
import Network.HTTP.Conduit (def, newManager)
import Network.HTTP.ReverseProxy (ProxyDest (ProxyDest),
waiProxyTo)
import Network.HTTP.Types (status200)
import Network.Wai (responseLBS)
import Network.Wai.Handler.Warp (run)
import Network.HTTP.Conduit (newManager, def)
import SrcLoc (Located)
lockFile :: DevelOpts -> FilePath
lockFile _opts = "yesod-devel/devel-terminate"
@ -109,10 +104,6 @@ data DevelOpts = DevelOpts
getBuildDir :: DevelOpts -> String
getBuildDir opts = fromMaybe "dist" (buildDir opts)
cabalCommand :: DevelOpts -> FilePath
cabalCommand opts | isCabalDev opts = "cabal-dev"
| otherwise = "cabal"
defaultDevelOpts :: DevelOpts
defaultDevelOpts = DevelOpts False False False (-1) Nothing Nothing Nothing
@ -156,16 +147,16 @@ devel opts passThroughArgs = withManager $ \manager -> do
-- outer loop re-reads the cabal file
mainOuterLoop filesModified = do
cabal <- liftIO $ D.findPackageDesc "."
gpd <- liftIO $ D.readPackageDescription D.normal cabal
ldar <- liftIO lookupLdAr
ghcVer <- liftIO ghcVersion
cabal <- liftIO $ D.findPackageDesc "."
gpd <- liftIO $ D.readPackageDescription D.normal cabal
ldar <- liftIO lookupLdAr
(hsSourceDirs, lib) <- liftIO $ checkCabalFile gpd
liftIO $ removeFileIfExists (bd </> "setup-config")
liftIO $ configure cabal gpd opts
liftIO $ configure cabal ghcVer gpd opts
liftIO $ removeFileIfExists "yesod-devel/ghcargs.txt" -- these files contain the wrong data after
liftIO $ removeFileIfExists "yesod-devel/arargs.txt" -- the configure step, remove them to force
liftIO $ removeFileIfExists "yesod-devel/ldargs.txt" -- a cabal build first
ghcVer <- liftIO ghcVersion
rebuild <- liftIO $ mkRebuild gpd ghcVer cabal opts ldar
mainInnerLoop hsSourceDirs filesModified cabal gpd lib ghcVer rebuild
@ -227,16 +218,14 @@ runBuildHook Nothing = return ()
cabal-dev uses the command-line tool, we can fall back to
cabal-dev buildopts if required
-}
configure :: FilePath -> D.GenericPackageDescription -> DevelOpts -> IO ()
configure _cabalFile gpd opts
| isCabalDev opts = rawSystem (cabalCommand opts) args >> return ()
| otherwise = do
lbi <- D.configure (gpd, hookedBuildInfo) configFlags
D.writePersistBuildConfig (getBuildDir opts) lbi -- fixme we could keep this in memory instead of file
configure :: FilePath -> String -> D.GenericPackageDescription -> DevelOpts -> IO ()
configure _cabalFile ghcVer gpd opts = do
lbi <- D.configure (gpd, hookedBuildInfo) configFlags
D.writePersistBuildConfig (getBuildDir opts) lbi -- fixme we could keep this in memory instead of file
where
hookedBuildInfo = (Nothing, [])
configFlags | forceCabal opts = config
| otherwise = config
configFlags0 | forceCabal opts = config
| otherwise = config
{ DSS.configProgramPaths =
[ ("ar", "yesod-ar-wrapper")
, ("ld", "yesod-ld-wrapper")
@ -244,34 +233,32 @@ configure _cabalFile gpd opts
]
, DSS.configHcPkg = DSS.Flag "ghc-pkg"
}
#if MIN_VERSION_Cabal(1,16,0)
configFlags | isCabalDev opts = configFlags0
{ DSS.configPackageDBs =
[ Nothing
, Just D.GlobalPackageDB
, Just cabalDevPackageDb
]
}
#else
configFlags | isCabalDev opts = configFlags0
{ DSS.configPackageDB = DSS.Flag cabalDevPackageDb
}
#endif
| otherwise = configFlags0
cabalDevPackageDb = D.SpecificPackageDB ("cabal-dev/packages-" ++ ghcVer ++ ".conf")
config = (DSS.defaultConfigFlags D.defaultProgramConfiguration)
{ DSS.configConfigurationsFlags =
[ (D.FlagName "devel", True) -- legaxy
[ (D.FlagName "devel", True) -- legacy
, (D.FlagName "library-only", True)
]
, DSS.configProfLib = DSS.Flag False
, DSS.configUserInstall = DSS.Flag True
}
cabalArgs
| isCabalDev opts = map ("--cabal-install-arg=" ++) as
| otherwise = as
where
as =
[ "-fdevel" -- legacy
, "-flibrary-only"
] ++ wrapperArgs
wrapperArgs
| forceCabal opts = []
| otherwise =
[ "--with-compiler=yesod-ghc-wrapper"
, "--with-hc-pkg=ghc-pkg"
, "--with-ld=yesod-ld-wrapper"
, "--with-ar=yesod-ar-wrapper"
]
args :: [String]
args = "configure":cabalArgs ++ ["--disable-library-profiling" ]
removeFileIfExists :: FilePath -> IO ()
removeFileIfExists file = removeFile file `Ex.catch` handler
@ -302,15 +289,7 @@ rebuildGhc bf ld ar = do
buildPackage bf ld ar
rebuildCabal :: D.GenericPackageDescription -> DevelOpts -> IO Bool
rebuildCabal _gpd opts
| isCabalDev opts = do
let cmd = cabalCommand opts
putStrLn $ "Rebuilding application... (using " ++ cmd ++ ")"
exit <- (if verbose opts then rawSystem else rawSystemFilter) cmd ["build"]
return $ case exit of
ExitSuccess -> True
_ -> False
| otherwise = do
rebuildCabal _gpd opts = do
putStrLn $ "Rebuilding application... (using Cabal library)"
lbi <- getPersistBuildConfig opts -- fixme we could cache this from the configure step
let buildFlags | verbose opts = DSS.defaultBuildFlags
@ -407,11 +386,12 @@ ghcVersion = fmap getNumber $ readProcess "runghc" ["--numeric-version", "0"] []
ghcPackageArgs :: DevelOpts -> String -> D.PackageDescription -> D.Library -> IO [String]
ghcPackageArgs opts ghcVer cabal lib = do
lbi <- getPersistBuildConfig opts
cbi <- fromMaybeErr errCbi (D.libraryConfig lbi)
if isCabalDev opts
then return ("-hide-all-packages" : "-no-user-package-conf" : inplaceConf : selfPkgArg lbi : cabalDevConf : depArgs lbi cbi)
else return ("-hide-all-packages" : inplaceConf : selfPkgArg lbi : depArgs lbi cbi)
lbi <- getPersistBuildConfig opts
cbi <- fromMaybeErr errCbi (D.libraryConfig lbi)
if isCabalDev opts
then return ("-hide-all-packages" : "-no-user-package-conf" : inplaceConf
: selfPkgArg lbi : cabalDevConf : depArgs lbi cbi)
else return ("-hide-all-packages" : inplaceConf : selfPkgArg lbi : depArgs lbi cbi)
where
selfPkgArg lbi = pkgArg . D.inplacePackageId . D.package . D.localPkgDescr $ lbi
pkgArg (D.InstalledPackageId pkgId) = "-package-id" ++ pkgId
@ -477,23 +457,6 @@ lookupLdAr' = do
where
look pgm pdb = fmap D.programPath (D.lookupProgram pgm pdb)
-- | Acts like @rawSystem@, but filters out lines from the output that we're not interested in seeing.
rawSystemFilter :: String -> [String] -> IO ExitCode
rawSystemFilter command args = do
(inh, outh, errh, ph) <- runInteractiveProcess command args Nothing Nothing
hClose inh
let go handlein handleout = do
isEof <- hIsEOF handlein
if isEof
then hClose handlein
else do
line <- hGetLine handlein
unless ("Loading package " `L.isPrefixOf` line) $ hPutStrLn handleout line
go handlein handleout
_ <- forkIO $ go outh stdout
_ <- forkIO $ go errh stderr
waitForProcess' ph
-- | nonblocking version of @waitForProcess@
waitForProcess' :: ProcessHandle -> IO ExitCode
waitForProcess' pid = go

View File

@ -1,5 +1,5 @@
name: yesod
version: 1.1.4
version: 1.1.4.1
license: MIT
license-file: LICENSE
author: Michael Snoyman <michael@snoyman.com>