From e16f93c1eb373e4bbe96cb803978aa5fef3cc9fc Mon Sep 17 00:00:00 2001 From: bjorn <bjorn@bringert.net> Date: Sun, 7 Oct 2007 09:04:30 +0000 Subject: [PATCH] Actually write some fields to the config file. --- .../Network/Hackage/CabalInstall/Config.hs | 19 ++++++++++++++----- .../src/Network/Hackage/CabalInstall/Utils.hs | 5 +++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/cabal-install/src/Network/Hackage/CabalInstall/Config.hs b/cabal-install/src/Network/Hackage/CabalInstall/Config.hs index 50bdb71200..0fb2fcdc6f 100644 --- a/cabal-install/src/Network/Hackage/CabalInstall/Config.hs +++ b/cabal-install/src/Network/Hackage/CabalInstall/Config.hs @@ -181,7 +181,8 @@ loadConfig configFile = minp <- readFileIfExists configFile case minp of Nothing -> do hPutStrLn stderr $ "Config file " ++ configFile ++ " not found." - writeDefaultConfigFile configFile + hPutStrLn stderr $ "Writing default configuration to " ++ configFile ++ "." + writeDefaultConfigFile configFile defaultConf return defaultConf Just inp -> case parseBasicStanza configFieldDescrs defaultConf inp of ParseOk ws dummyConf -> @@ -200,12 +201,20 @@ loadConfig configFile = return defaultConf -- FIXME: finish this -writeDefaultConfigFile :: FilePath -> IO () -writeDefaultConfigFile file = - do writeFile file "" +writeDefaultConfigFile :: FilePath -> ConfigFlags -> IO () +writeDefaultConfigFile file cfg = + writeFile file $ showFields configWriteFieldDescrs cfg +-- | All config file fields. configFieldDescrs :: [FieldDescr ConfigFlags] configFieldDescrs = + [ + ] ++ configWriteFieldDescrs + +-- | The subset of the config file fields that we write out +-- if the config file is missing. +configWriteFieldDescrs :: [FieldDescr ConfigFlags] +configWriteFieldDescrs = [ simpleField "compiler" (text . show) parseCompilerFlavor configCompiler (\c cfg -> cfg { configCompiler = c }) @@ -215,7 +224,7 @@ configFieldDescrs = , simpleField "prefix" (text . show) (readS_to_P reads) (prefixDirTemplate . configInstallDirs) (\d -> setInstallDir (\ds -> ds { prefixDirTemplate = d })) - ] + ] setInstallDir :: (InstallDirTemplates -> InstallDirTemplates) -> ConfigFlags -> ConfigFlags setInstallDir f cfg = cfg { configInstallDirs = f (configInstallDirs cfg) } diff --git a/cabal-install/src/Network/Hackage/CabalInstall/Utils.hs b/cabal-install/src/Network/Hackage/CabalInstall/Utils.hs index 1cbb9589a9..e400559f69 100644 --- a/cabal-install/src/Network/Hackage/CabalInstall/Utils.hs +++ b/cabal-install/src/Network/Hackage/CabalInstall/Utils.hs @@ -10,6 +10,7 @@ import Control.Monad (foldM, guard) import Data.Char (isSpace) import Data.Maybe (listToMaybe) import System.IO.Error (isDoesNotExistError) +import Text.PrettyPrint.HughesPJ isVerbose cfg = configVerbose cfg >= verbose @@ -59,3 +60,7 @@ setField _ x s = lookupFieldDescr :: [FieldDescr a] -> String -> Maybe (FieldDescr a) lookupFieldDescr fs n = listToMaybe [f | f@(FieldDescr name _ _) <- fs, name == n] + + +showFields :: [FieldDescr a] -> a -> String +showFields fs x = render $ vcat [ text name <> text ":" <+> get x | FieldDescr name get _ <- fs] -- GitLab