exit application on enter
This commit is contained in:
parent
ddb470b1a7
commit
58a91c7634
@ -25,7 +25,7 @@ import qualified Data.Text.IO as T
|
|||||||
|
|
||||||
import System.Directory (createDirectoryIfMissing, removeFile,
|
import System.Directory (createDirectoryIfMissing, removeFile,
|
||||||
getDirectoryContents)
|
getDirectoryContents)
|
||||||
import System.Exit (exitFailure)
|
import System.Exit (exitFailure, exitSuccess)
|
||||||
import System.Posix.Types (EpochTime)
|
import System.Posix.Types (EpochTime)
|
||||||
import System.PosixCompat.Files (modificationTime, getFileStatus)
|
import System.PosixCompat.Files (modificationTime, getFileStatus)
|
||||||
import System.Process (runCommand, terminateProcess,
|
import System.Process (runCommand, terminateProcess,
|
||||||
@ -38,24 +38,38 @@ import Build (touch, getDeps, findHaskellFiles)
|
|||||||
lockFile :: FilePath
|
lockFile :: FilePath
|
||||||
lockFile = "dist/devel-terminate"
|
lockFile = "dist/devel-terminate"
|
||||||
|
|
||||||
devel :: Bool -> IO ()
|
writeLock :: IO ()
|
||||||
devel isDevel = do
|
writeLock = do
|
||||||
createDirectoryIfMissing True "dist"
|
createDirectoryIfMissing True "dist"
|
||||||
writeFile lockFile ""
|
writeFile lockFile ""
|
||||||
|
|
||||||
cabal <- D.findPackageDesc "."
|
removeLock :: IO ()
|
||||||
gpd <- D.readPackageDescription D.normal cabal
|
removeLock = try_ (removeFile lockFile)
|
||||||
let pid = (D.package . D.packageDescription) gpd
|
|
||||||
|
|
||||||
checkCabalFile gpd
|
devel :: Bool -> IO ()
|
||||||
|
devel isDevel = do
|
||||||
|
writeLock
|
||||||
|
|
||||||
_ <- if isDevel
|
putStrLn "Yesod devel server. Pres ENTER to quit"
|
||||||
then rawSystem "cabal-dev" ["configure", "--cabal-install-arg=-fdevel"]
|
_ <- forkIO $ do
|
||||||
else rawSystem "cabal" ["configure", "-fdevel"]
|
cabal <- D.findPackageDesc "."
|
||||||
|
gpd <- D.readPackageDescription D.normal cabal
|
||||||
|
let pid = (D.package . D.packageDescription) gpd
|
||||||
|
|
||||||
T.writeFile "dist/devel.hs" (develFile pid)
|
checkCabalFile gpd
|
||||||
|
|
||||||
|
_ <- if isDevel
|
||||||
|
then rawSystem "cabal-dev" ["configure", "--cabal-install-arg=-fdevel"]
|
||||||
|
else rawSystem "cabal" ["configure", "-fdevel"]
|
||||||
|
|
||||||
|
T.writeFile "dist/devel.hs" (develFile pid)
|
||||||
|
|
||||||
|
mainLoop isDevel
|
||||||
|
|
||||||
|
_ <- getLine
|
||||||
|
writeLock
|
||||||
|
exitSuccess
|
||||||
|
|
||||||
mainLoop isDevel
|
|
||||||
|
|
||||||
|
|
||||||
mainLoop :: Bool -> IO ()
|
mainLoop :: Bool -> IO ()
|
||||||
@ -69,14 +83,14 @@ mainLoop isDevel = forever $ do
|
|||||||
then rawSystem "cabal" ["build"]
|
then rawSystem "cabal" ["build"]
|
||||||
else rawSystem "cabal-dev" ["build"]
|
else rawSystem "cabal-dev" ["build"]
|
||||||
|
|
||||||
try_ $ removeFile lockFile
|
removeLock
|
||||||
putStrLn "Starting development server..."
|
putStrLn "Starting development server..."
|
||||||
pkg <- pkgConfigs isDevel
|
pkg <- pkgConfigs isDevel
|
||||||
ph <- runCommand $ concat ["runghc ", pkg, " dist/devel.hs"]
|
ph <- runCommand $ concat ["runghc ", pkg, " dist/devel.hs"]
|
||||||
watchTid <- forkIO . try_ $ do
|
watchTid <- forkIO . try_ $ do
|
||||||
watchForChanges list
|
watchForChanges list
|
||||||
putStrLn "Stopping development server..."
|
putStrLn "Stopping development server..."
|
||||||
writeFile lockFile ""
|
writeLock
|
||||||
threadDelay 1000000
|
threadDelay 1000000
|
||||||
putStrLn "Terminating development server..."
|
putStrLn "Terminating development server..."
|
||||||
terminateProcess ph
|
terminateProcess ph
|
||||||
@ -147,9 +161,7 @@ loop = do
|
|||||||
if e then terminateDevel else loop
|
if e then terminateDevel else loop
|
||||||
|
|
||||||
terminateDevel :: IO ()
|
terminateDevel :: IO ()
|
||||||
terminateDevel = do
|
terminateDevel = exitSuccess
|
||||||
putStrLn "Devel application exiting"
|
|
||||||
exitSuccess
|
|
||||||
|]
|
|]
|
||||||
|
|
||||||
checkCabalFile :: D.GenericPackageDescription -> IO ()
|
checkCabalFile :: D.GenericPackageDescription -> IO ()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user