From fada98e2d0d2fdda36476befdf4e9176f3e40dc7 Mon Sep 17 00:00:00 2001 From: Mikhail Glushenkov <the.dead.shall.rise@gmail.com> Date: Fri, 16 Nov 2012 21:26:19 +0100 Subject: [PATCH] Use settings from ~/.cabal/config when creating a sandbox. This way, the user won't be required to set things like 'split-objs' individually for each sandbox. --- .../Distribution/Client/PackageEnvironment.hs | 28 +++++++++---------- cabal-install/Distribution/Client/Sandbox.hs | 7 +++-- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/cabal-install/Distribution/Client/PackageEnvironment.hs b/cabal-install/Distribution/Client/PackageEnvironment.hs index ea6d5873c5..c688d2a901 100644 --- a/cabal-install/Distribution/Client/PackageEnvironment.hs +++ b/cabal-install/Distribution/Client/PackageEnvironment.hs @@ -25,8 +25,7 @@ module Distribution.Client.PackageEnvironment ( ) where import Distribution.Client.Config ( SavedConfig(..), commentSavedConfig, - initialSavedConfig, loadConfig, - configFieldDescriptions, + loadConfig, configFieldDescriptions, installDirsFields, defaultCompiler ) import Distribution.Client.ParseUtils ( parseFields, ppFields, ppSection ) import Distribution.Client.Setup ( GlobalFlags(..), ConfigExFlags(..) @@ -132,19 +131,19 @@ basePackageEnvironment sandboxDir = do -- | Initial configuration that we write out to the package environment file if -- it does not exist. When the package environment gets loaded this -- configuration gets layered on top of 'basePackageEnvironment'. -initialPackageEnvironment :: FilePath -> Compiler -> IO PackageEnvironment -initialPackageEnvironment sandboxDir compiler = do - initialConf' <- initialSavedConfig - let baseConf = commonPackageEnvironmentConfig sandboxDir - let initialConf = initialConf' `mappend` baseConf +initialPackageEnvironment :: FilePath -> Compiler -> SavedConfig + -> IO PackageEnvironment +initialPackageEnvironment sandboxDir compiler userConfig = do + let commonConfig = commonPackageEnvironmentConfig sandboxDir + initialConfig = userConfig `mappend` commonConfig return $ mempty { - pkgEnvSavedConfig = initialConf { - savedGlobalFlags = (savedGlobalFlags initialConf) { + pkgEnvSavedConfig = initialConfig { + savedGlobalFlags = (savedGlobalFlags initialConfig) { globalLocalRepos = [sandboxDir </> "packages"] }, savedConfigureFlags = setPackageDB sandboxDir compiler - (savedConfigureFlags initialConf), - savedInstallFlags = (savedInstallFlags initialConf) { + (savedConfigureFlags initialConfig), + savedInstallFlags = (savedInstallFlags initialConfig) { installSummaryFile = [toPathTemplate (sandboxDir </> "logs" </> "build.log")] } @@ -233,14 +232,15 @@ tryLoadPackageEnvironment verbosity pkgEnvDir = do -- | Create a new package environment file, replacing the existing one if it -- exists. Note that the path parameters should point to existing directories. -createPackageEnvironment :: Verbosity -> FilePath -> FilePath -> Compiler +createPackageEnvironment :: Verbosity -> FilePath -> FilePath + -> Compiler -> SavedConfig -> IO PackageEnvironment -createPackageEnvironment verbosity sandboxDir pkgEnvDir compiler = do +createPackageEnvironment verbosity sandboxDir pkgEnvDir compiler userConfig = do let path = pkgEnvDir </> sandboxPackageEnvironmentFile notice verbosity $ "Writing default package environment to " ++ path commentPkgEnv <- commentPackageEnvironment sandboxDir - initialPkgEnv <- initialPackageEnvironment sandboxDir compiler + initialPkgEnv <- initialPackageEnvironment sandboxDir compiler userConfig writePackageEnvironmentFile path commentPkgEnv initialPkgEnv user <- userPkgEnv verbosity pkgEnvDir diff --git a/cabal-install/Distribution/Client/Sandbox.hs b/cabal-install/Distribution/Client/Sandbox.hs index 2a59a30e9b..33cc085c6a 100644 --- a/cabal-install/Distribution/Client/Sandbox.hs +++ b/cabal-install/Distribution/Client/Sandbox.hs @@ -107,7 +107,7 @@ dumpPackageEnvironment verbosity _sandboxFlags = do -- | Entry point for the 'cabal sandbox-init' command. sandboxInit :: Verbosity -> SandboxFlags -> GlobalFlags -> IO () -sandboxInit verbosity sandboxFlags _globalFlags = do +sandboxInit verbosity sandboxFlags globalFlags = do -- Create the sandbox directory. let sandboxDir' = fromFlagOrDefault defaultSandboxLocation (sandboxLocation sandboxFlags) @@ -116,12 +116,13 @@ sandboxInit verbosity sandboxFlags _globalFlags = do notice verbosity $ "Using a sandbox located at " ++ sandboxDir -- Determine which compiler to use (using the value from ~/.cabal/config). - userConfig <- loadConfig verbosity NoFlag NoFlag + userConfig <- loadConfig verbosity (globalConfigFile globalFlags) NoFlag (comp, conf) <- configCompilerAux (savedConfigureFlags userConfig) -- Create the package environment file. pkgEnvDir <- getCurrentDirectory - pkgEnv <- createPackageEnvironment verbosity sandboxDir pkgEnvDir comp + pkgEnv <- createPackageEnvironment verbosity sandboxDir pkgEnvDir + comp userConfig -- Create the index file if it doesn't exist. indexFile <- tryGetIndexFilePath pkgEnv -- GitLab