module Development.Bake.Build(
ovenIncremental, incrementalDone, incrementalStart
) where
import Development.Bake.Core.Type
import Development.Shake.Command
import Control.Monad.Extra
import Control.Applicative
import System.FilePath
import Control.Exception.Extra
import System.Directory
import General.Extra
import Prelude
ovenIncremental :: Oven state patch test -> Oven state patch test
ovenIncremental oven@Oven{..} = oven{ovenPrepare = \s ps -> do incPrepare s ps; ovenPrepare s ps}
where
incPrepare s ps = ignore $ do
unlessM (doesFileExist ".bake.incremental") $ do
src <- takeWhile (/= '\n') <$> readFile "../bake-incremental.txt"
whenM (doesFileExist $ ".." </> src </> ".bake.incremental") $ do
putStrLn $ "Preparing by copying from " ++ src
timed "copying for ovenIncremental" $
cmd "cp --preserve=timestamps --recursive --no-target-directory" ("../" ++ src) "."
incrementalStart :: IO ()
incrementalStart =
writeFile ".bake.incremental" ""
incrementalDone :: IO ()
incrementalDone = do
incrementalStart
x <- getCurrentDirectory
writeFile "../bake-incremental.txt" $ unlines [takeFileName x]