Move db target directories

This commit is contained in:
Chris Done 2015-02-17 17:26:44 +01:00
parent 77f1ea3789
commit 579f0dfd7e
2 changed files with 20 additions and 19 deletions

View File

@ -70,7 +70,7 @@ nightlySettings :: Text -- ^ day
-> Settings -> Settings
nightlySettings day plan' = Settings nightlySettings day plan' = Settings
{ planFile = nightlyPlanFile day { planFile = nightlyPlanFile day
, buildDir = fpFromText $ "builds/stackage-nightly-" ++ day , buildDir = fpFromText $ "nightly"
, logDir = fpFromText $ "logs/stackage-nightly-" ++ day , logDir = fpFromText $ "logs/stackage-nightly-" ++ day
, title = \ghcVer -> concat , title = \ghcVer -> concat
[ "Stackage Nightly " [ "Stackage Nightly "

View File

@ -60,13 +60,14 @@ performBuild pb' = do
cur <- FP.getWorkingDirectory cur <- FP.getWorkingDirectory
let shakeDir = cur <> "shake/" let shakeDir = cur <> "shake/"
FP.createTree shakeDir FP.createTree shakeDir
FP.createTree (buildDatabase pb')
haddockFiles <- liftIO (newTVarIO mempty) haddockFiles <- liftIO (newTVarIO mempty)
registerLock <- liftIO (newMVar ()) registerLock <- liftIO (newMVar ())
pkgs <- getRegisteredPackages (buildDatabase shakeDir)
let !pb = pb' let !pb = pb'
{ pbInstallDest = cur <> pbInstallDest pb' { pbInstallDest = cur <> pbInstallDest pb'
} }
!env = Env pkgs <- getRegisteredPackages (buildDatabase pb)
let !env = Env
{ envCur = cur { envCur = cur
, envShake = shakeDir , envShake = shakeDir
, envHaddocks = haddockFiles , envHaddocks = haddockFiles
@ -136,7 +137,7 @@ targetForBuild pb = Target $ (pbInstallDest pb) <> "shake-built"
-- | Get a package database path. -- | Get a package database path.
targetForDb :: Env -> Target targetForDb :: Env -> Target
targetForDb Env{..} = Target $ envShake <> "pkgdb-initialized" targetForDb Env{..} = Target $ (pbInstallDest envPB) <> "pkgdb-initialized"
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Locations, names and environments used. Just to avoid "magic -- Locations, names and environments used. Just to avoid "magic
@ -147,15 +148,15 @@ nameVer :: PackageName -> Version -> String
nameVer name version = display name ++ "-" ++ display version nameVer name version = display name ++ "-" ++ display version
-- | Default environment for running commands. -- | Default environment for running commands.
defaultEnv :: PerformBuild -> FilePath -> FilePath -> [(String, String)] defaultEnv :: PerformBuild -> FilePath -> [(String, String)]
defaultEnv pb shakeDir pwd = defaultEnv pb pwd =
[( "HASKELL_PACKAGE_SANDBOX" [( "HASKELL_PACKAGE_SANDBOX"
, FP.encodeString (pwd <> buildDatabase shakeDir)) , FP.encodeString (pwd <> buildDatabase pb))
| pbGlobalInstall pb] | pbGlobalInstall pb]
-- | Database location. -- | Database location.
buildDatabase :: FilePath -> FilePath buildDatabase :: PerformBuild -> FilePath
buildDatabase shakeDir = shakeDir <> "pkgdb" buildDatabase pb = (pbInstallDest pb) <> "pkgdb"
-- | The directory for the package's docs. -- | The directory for the package's docs.
pkgDocDir :: Env -> PackageName -> Version -> FilePath pkgDocDir :: Env -> PackageName -> Version -> FilePath
@ -216,7 +217,7 @@ data PurgeReason
cleanOldPackages :: Env -> IO () cleanOldPackages :: Env -> IO ()
cleanOldPackages env@Env{..} = do cleanOldPackages env@Env{..} = do
putStrLn "Collecting garbage" putStrLn "Collecting garbage"
pkgs <- getRegisteredPackages (buildDatabase envShake) pkgs <- getRegisteredPackages (buildDatabase envPB)
let toRemove = mapMaybe let toRemove = mapMaybe
(\(PackageIdentifier name version) -> (\(PackageIdentifier name version) ->
case M.lookup name versions of case M.lookup name versions of
@ -244,7 +245,7 @@ cleanOldPackages env@Env{..} = do
version version
(Replaced newVersion) (Replaced newVersion)
Nothing -> purgePackage env name version NoLongerIncluded Nothing -> purgePackage env name version NoLongerIncluded
broken <- getBrokenPackages (buildDatabase envShake) broken <- getBrokenPackages (buildDatabase envPB)
unless (null broken) unless (null broken)
(putStrLn ("There are " ++ show (length broken) ++ " broken packages to be purged.")) (putStrLn ("There are " ++ show (length broken) ++ " broken packages to be purged."))
when (length broken > 0) when (length broken > 0)
@ -260,7 +261,7 @@ cleanOldPackages env@Env{..} = do
purgePackage :: Env -> PackageName -> Version -> PurgeReason -> IO () purgePackage :: Env -> PackageName -> Version -> PurgeReason -> IO ()
purgePackage env name version reason = do purgePackage env name version reason = do
putStr $ "Purging package: " ++ ident ++ " (" ++ showReason ++ ") ... " putStr $ "Purging package: " ++ ident ++ " (" ++ showReason ++ ") ... "
unregisterPackage (buildDatabase (envShake env)) name unregisterPackage (buildDatabase (envPB env)) name
remove remove
putStrLn "done." putStrLn "done."
where showReason = where showReason =
@ -284,18 +285,18 @@ databaseTarget env = do
if pbGlobalInstall (envPB env) if pbGlobalInstall (envPB env)
then return () then return ()
else do else do
liftIO (FP.removeTree dir)
liftIO (FP.createTree dir) liftIO (FP.createTree dir)
liftIO (FP.removeTree dir)
() <- cmd "ghc-pkg" "init" (FP.encodeString dir) () <- cmd "ghc-pkg" "init" (FP.encodeString dir)
liftIO $ copyBuiltInHaddocks $ pbDocDir (envPB env) liftIO $ copyBuiltInHaddocks $ pbDocDir (envPB env)
makeTargetFile (targetForDb env) makeTargetFile (targetForDb env)
where dir = buildDatabase (envShake env) where dir = buildDatabase (envPB env)
-- | Generate haddock docs for the package. -- | Generate haddock docs for the package.
packageDocs :: Env -> PackagePlan -> PackageName -> Action () packageDocs :: Env -> PackagePlan -> PackageName -> Action ()
packageDocs env@Env{..} plan name = do packageDocs env@Env{..} plan name = do
pwd <- liftIO FP.getWorkingDirectory pwd <- liftIO FP.getWorkingDirectory
envmap <- liftIO (fmap (Shake.Env . (++ defaultEnv envPB envShake pwd)) getEnvironment) envmap <- liftIO (fmap (Shake.Env . (++ defaultEnv envPB pwd)) getEnvironment)
when (haddocksFlag /= Don'tBuild && when (haddocksFlag /= Don'tBuild &&
not (S.null $ sdModules $ ppDesc plan)) $ not (S.null $ sdModules $ ppDesc plan)) $
generateHaddocks generateHaddocks
@ -318,7 +319,7 @@ packageTarget env@Env{..} name plan = do
filter (/= name) $ filter (/= name) $
M.keys $ M.filter libAndExe $ sdPackages $ ppDesc plan M.keys $ M.filter libAndExe $ sdPackages $ ppDesc plan
pwd <- liftIO FP.getWorkingDirectory pwd <- liftIO FP.getWorkingDirectory
envmap <- liftIO (fmap (Shake.Env . (++ defaultEnv envPB envShake pwd)) getEnvironment) envmap <- liftIO (fmap (Shake.Env . (++ defaultEnv envPB pwd)) getEnvironment)
unpack env name version unpack env name version
configure env dir envmap plan configure env dir envmap plan
() <- cmd cwd envmap "cabal" "build" "--ghc-options=-O0" () <- cmd cwd envmap "cabal" "build" "--ghc-options=-O0"
@ -370,7 +371,7 @@ configure Env{..} pdir env plan =
, "--datadir=" ++ FP.encodeString (pbDataDir envPB) , "--datadir=" ++ FP.encodeString (pbDataDir envPB)
, "--docdir=" ++ FP.encodeString (pbDocDir envPB) , "--docdir=" ++ FP.encodeString (pbDocDir envPB)
, "--flags=" ++ planFlags] ++ , "--flags=" ++ planFlags] ++
["--package-db=" ++ FP.encodeString (buildDatabase envShake) ["--package-db=" ++ FP.encodeString (buildDatabase envPB)
| not (pbGlobalInstall envPB)] | not (pbGlobalInstall envPB)]
planFlags = unwords $ planFlags = unwords $
map go $ M.toList (pcFlagOverrides (ppConstraints plan)) map go $ M.toList (pcFlagOverrides (ppConstraints plan))