From 9d3bab31d0ad404db4e6a1338db698a4637f5084 Mon Sep 17 00:00:00 2001 From: Chris Done Date: Tue, 13 Jan 2015 20:27:56 +0100 Subject: [PATCH] Proper caching of database --- Stackage/ShakeBuild.hs | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/Stackage/ShakeBuild.hs b/Stackage/ShakeBuild.hs index 86f83112..125cb737 100644 --- a/Stackage/ShakeBuild.hs +++ b/Stackage/ShakeBuild.hs @@ -35,7 +35,7 @@ shakePlan pb shakeDir = do fetched <- target (targetForFetched shakeDir) $ fetchedTarget shakeDir pb db <- target - (targetForDb shakeDir pb) + (targetForDb' shakeDir) (databaseTarget shakeDir pb) _ <- forM corePackages $ \name -> @@ -59,13 +59,18 @@ shakePlan pb shakeDir = do -- create the target file. databaseTarget :: FilePath -> PerformBuild -> Action () databaseTarget shakeDir pb = - if pbGlobalInstall pb - then liftIO (createDirectoryIfMissing True dir) - else do liftIO (createDirectoryIfMissing True (dir)) - liftIO (removeDirectoryRecursive dir) - () <- cmd "ghc-pkg" "init" dir - liftIO (copyBuiltInHaddocks (FP.decodeString (pbDocDir pb))) - where dir = targetForDb shakeDir pb + do if pbGlobalInstall pb + then return () + else do liftIO (createDirectoryIfMissing True dir) + liftIO (removeDirectoryRecursive dir) + () <- cmd "ghc-pkg" "init" dir + liftIO (copyBuiltInHaddocks (FP.decodeString (pbDocDir pb))) + makeFile (targetForDb' shakeDir) + where dir = buildDatabase pb + +-- | Database location. +buildDatabase :: PerformBuild -> FilePattern +buildDatabase pb = FP.encodeString (pbInstallDest pb) "pkgdb" -- | Make sure all package archives have been fetched. fetchedTarget :: FilePath -> PerformBuild -> Action () @@ -101,7 +106,8 @@ packageTarget pb shakeDir name plan = do defaultEnv pwd = [ ( "HASKELL_PACKAGE_SANDBOX" , pwd - targetForDb shakeDir pb)] + buildDatabase pb) + | pbGlobalInstall pb] pkgDir = shakeDir nameVer nameVer = display name ++ @@ -120,7 +126,7 @@ opts shakeDir pb plan pwd = , "--flags=" ++ planFlags plan] ++ ["--package-db=" ++ pwd - targetForDb shakeDir pb | not (pbGlobalInstall pb)] + buildDatabase pb | not (pbGlobalInstall pb)] -- | Generate a flags string for the package plan. planFlags :: PackagePlan -> String @@ -145,11 +151,9 @@ targetForPackage shakeDir name = shakeDir "packages" display name -- | Get a package database path. -targetForDb :: FilePath -> PerformBuild -> FilePath -targetForDb shakeDir pb = - if pbGlobalInstall pb - then shakeDir "pkgdb-global" - else FP.encodeString (pbInstallDest pb) "pkgdb" +targetForDb' :: FilePath -> FilePath +targetForDb' shakeDir = + shakeDir "pkgdb" -- | Declare a target, returning the target name. target :: FilePattern -> Action () -> Rules FilePattern