yesod devel uses command line
This commit is contained in:
parent
9adf931c67
commit
2e90d0a6b7
@ -139,6 +139,7 @@ getFolderContents :: FilePath -> IO [FilePath]
|
|||||||
getFolderContents fp = do
|
getFolderContents fp = do
|
||||||
cs <- getDirectoryContents fp
|
cs <- getDirectoryContents fp
|
||||||
let notHidden ('.':_) = False
|
let notHidden ('.':_) = False
|
||||||
|
notHidden "tmp" = False
|
||||||
notHidden _ = True
|
notHidden _ = True
|
||||||
fmap concat $ forM (filter notHidden cs) $ \c -> do
|
fmap concat $ forM (filter notHidden cs) $ \c -> do
|
||||||
let f = fp ++ '/' : c
|
let f = fp ++ '/' : c
|
||||||
|
|||||||
@ -5,6 +5,7 @@ module Scaffold.Devel
|
|||||||
|
|
||||||
import qualified Distribution.Simple.Build as B
|
import qualified Distribution.Simple.Build as B
|
||||||
import Distribution.Simple.Configure (configure)
|
import Distribution.Simple.Configure (configure)
|
||||||
|
import Distribution.Simple (defaultMainArgs)
|
||||||
import Distribution.Simple.Setup (defaultConfigFlags, configConfigurationsFlags, configUserInstall, Flag (..), defaultBuildFlags, defaultCopyFlags, defaultRegisterFlags)
|
import Distribution.Simple.Setup (defaultConfigFlags, configConfigurationsFlags, configUserInstall, Flag (..), defaultBuildFlags, defaultCopyFlags, defaultRegisterFlags)
|
||||||
import Distribution.Simple.Utils (defaultPackageDesc, defaultHookedPackageDesc)
|
import Distribution.Simple.Utils (defaultPackageDesc, defaultHookedPackageDesc)
|
||||||
import Distribution.Simple.Program (defaultProgramConfiguration)
|
import Distribution.Simple.Program (defaultProgramConfiguration)
|
||||||
@ -30,8 +31,9 @@ import Control.Monad (when, forever)
|
|||||||
import System.Process (runCommand, terminateProcess, getProcessExitCode, waitForProcess)
|
import System.Process (runCommand, terminateProcess, getProcessExitCode, waitForProcess)
|
||||||
import qualified Data.IORef as I
|
import qualified Data.IORef as I
|
||||||
import qualified Data.ByteString.Lazy.Char8 as L
|
import qualified Data.ByteString.Lazy.Char8 as L
|
||||||
import System.Directory (doesFileExist, removeFile)
|
import System.Directory (doesFileExist, removeFile, getDirectoryContents)
|
||||||
import Distribution.Package (PackageName (..), pkgName)
|
import Distribution.Package (PackageName (..), pkgName)
|
||||||
|
import Data.Maybe (mapMaybe)
|
||||||
|
|
||||||
appMessage :: L.ByteString -> IO ()
|
appMessage :: L.ByteString -> IO ()
|
||||||
appMessage l = forever $ do
|
appMessage l = forever $ do
|
||||||
@ -43,10 +45,9 @@ swapApp i f = do
|
|||||||
I.readIORef i >>= killThread
|
I.readIORef i >>= killThread
|
||||||
f >>= I.writeIORef i
|
f >>= I.writeIORef i
|
||||||
|
|
||||||
devel :: ([String] -> IO ()) -- ^ configure command
|
devel :: ([String] -> IO ()) -- ^ cabal
|
||||||
-> ([String] -> IO ()) -- ^ build command
|
|
||||||
-> IO ()
|
-> IO ()
|
||||||
devel conf build = do
|
devel cabalCmd = do
|
||||||
e <- doesFileExist "dist/devel-flag"
|
e <- doesFileExist "dist/devel-flag"
|
||||||
when e $ removeFile "dist/devel-flag"
|
when e $ removeFile "dist/devel-flag"
|
||||||
listenThread <- forkIO (appMessage "Initializing, please wait") >>= I.newIORef
|
listenThread <- forkIO (appMessage "Initializing, please wait") >>= I.newIORef
|
||||||
@ -60,10 +61,7 @@ devel conf build = do
|
|||||||
Nothing -> return emptyHookedBuildInfo
|
Nothing -> return emptyHookedBuildInfo
|
||||||
Just fp -> readHookedBuildInfo normal fp
|
Just fp -> readHookedBuildInfo normal fp
|
||||||
|
|
||||||
lbi <- configure (gpd, hooked) (defaultConfigFlags defaultProgramConfiguration)
|
cabalCmd ["configure", "-fdevel"]
|
||||||
{ configConfigurationsFlags = [(FlagName "devel", True)]
|
|
||||||
, configUserInstall = Flag True
|
|
||||||
}
|
|
||||||
|
|
||||||
let myTry :: IO () -> IO ()
|
let myTry :: IO () -> IO ()
|
||||||
myTry f = try f >>= \x -> case x of
|
myTry f = try f >>= \x -> case x of
|
||||||
@ -77,16 +75,10 @@ devel conf build = do
|
|||||||
deps <- getDeps
|
deps <- getDeps
|
||||||
touchDeps deps
|
touchDeps deps
|
||||||
|
|
||||||
B.build
|
cabalCmd ["build"]
|
||||||
(localPkgDescr lbi)
|
defaultMainArgs ["install"]
|
||||||
lbi
|
|
||||||
defaultBuildFlags
|
|
||||||
[]
|
|
||||||
|
|
||||||
install (localPkgDescr lbi) lbi defaultCopyFlags
|
pi' <- getPackageName
|
||||||
register (localPkgDescr lbi) lbi defaultRegisterFlags
|
|
||||||
|
|
||||||
let PackageName pi' = pkgName $ package $ localPkgDescr lbi
|
|
||||||
writeFile "dist/devel.hs" $ unlines
|
writeFile "dist/devel.hs" $ unlines
|
||||||
[ "{-# LANGUAGE PackageImports #-}"
|
[ "{-# LANGUAGE PackageImports #-}"
|
||||||
, concat
|
, concat
|
||||||
@ -152,3 +144,14 @@ loop oldList getNewApp = do
|
|||||||
|
|
||||||
errApp :: String -> Application
|
errApp :: String -> Application
|
||||||
errApp s _ = return $ ResponseBuilder status500 [("Content-Type", "text/plain")] $ fromString s
|
errApp s _ = return $ ResponseBuilder status500 [("Content-Type", "text/plain")] $ fromString s
|
||||||
|
|
||||||
|
getPackageName :: IO String
|
||||||
|
getPackageName = do
|
||||||
|
xs <- getDirectoryContents "."
|
||||||
|
case mapMaybe (toCabal . reverse) xs of
|
||||||
|
[x] -> return x
|
||||||
|
[] -> error "No cabal files found"
|
||||||
|
_ -> error "Too many cabal files found"
|
||||||
|
where
|
||||||
|
toCabal ('l':'a':'b':'a':'c':'.':x) = Just $ reverse x
|
||||||
|
toCabal _ = Nothing
|
||||||
|
|||||||
@ -42,13 +42,14 @@ main = do
|
|||||||
"--dev":rest -> (True, rest)
|
"--dev":rest -> (True, rest)
|
||||||
_ -> (False, args')
|
_ -> (False, args')
|
||||||
let cmd = if isDev then "cabal-dev" else "cabal"
|
let cmd = if isDev then "cabal-dev" else "cabal"
|
||||||
let conf rest = rawSystem cmd ("configure":rest) >> return ()
|
let cabal rest = rawSystem cmd rest >> return ()
|
||||||
let build rest = rawSystem cmd ("build":rest) >> return ()
|
let conf rest = cabal $ "configure":rest
|
||||||
|
let build rest = cabal $ "build":rest
|
||||||
case args of
|
case args of
|
||||||
["init"] -> scaffold
|
["init"] -> scaffold
|
||||||
"build":rest -> touch >> build rest
|
"build":rest -> touch >> build rest
|
||||||
["touch"] -> touch
|
["touch"] -> touch
|
||||||
["devel"] -> devel conf build
|
["devel"] -> devel cabal
|
||||||
"configure":rest -> conf rest
|
"configure":rest -> conf rest
|
||||||
_ -> do
|
_ -> do
|
||||||
putStrLn "Usage: yesod <command>"
|
putStrLn "Usage: yesod <command>"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user