module Distribution.Client.Init (initCmd) where
import Distribution.Client.IndexUtils
import Distribution.Client.Init.FileCreators
import qualified Distribution.Client.Init.Interactive.Command as Interactive
import qualified Distribution.Client.Init.NonInteractive.Command as NonInteractive
import qualified Distribution.Client.Init.Simple as Simple
import Distribution.Client.Init.Types
import Distribution.Client.Setup (RepoContext)
import Distribution.Simple.Compiler
import Distribution.Simple.Program (ProgramDb)
import Distribution.Simple.Setup
import Distribution.Verbosity
import System.IO (BufferMode (NoBuffering), hSetBuffering, stdout)
initCmd
:: Verbosity
-> PackageDBStackCWD
-> RepoContext
-> Compiler
-> ProgramDb
-> InitFlags
-> IO ()
initCmd :: Verbosity
-> PackageDBStackCWD
-> RepoContext
-> Compiler
-> ProgramDb
-> InitFlags
-> IO ()
initCmd Verbosity
v PackageDBStackCWD
packageDBs RepoContext
repoCtxt Compiler
comp ProgramDb
progdb InitFlags
initFlags = do
InstalledPackageIndex
installedPkgIndex <- Verbosity
-> Compiler
-> PackageDBStackCWD
-> ProgramDb
-> IO InstalledPackageIndex
getInstalledPackages Verbosity
v Compiler
comp PackageDBStackCWD
packageDBs ProgramDb
progdb
SourcePackageDb
sourcePkgDb <- Verbosity -> RepoContext -> IO SourcePackageDb
getSourcePackages Verbosity
v RepoContext
repoCtxt
Handle -> BufferMode -> IO ()
hSetBuffering Handle
stdout BufferMode
NoBuffering
PromptIO () -> IO ()
forall a. PromptIO a -> IO a
runPromptIO (ProjectSettings -> PromptIO ()
forall (m :: * -> *). Interactive m => ProjectSettings -> m ()
writeProject (ProjectSettings -> PromptIO ())
-> PromptIO ProjectSettings -> PromptIO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Verbosity
-> InstalledPackageIndex
-> SourcePackageDb
-> InitFlags
-> PromptIO ProjectSettings
createProject Verbosity
v InstalledPackageIndex
installedPkgIndex SourcePackageDb
sourcePkgDb InitFlags
initFlags)
where
createProject :: Verbosity
-> InstalledPackageIndex
-> SourcePackageDb
-> InitFlags
-> PromptIO ProjectSettings
createProject
| Bool -> Flag Bool -> Bool
forall a. a -> Flag a -> a
fromFlagOrDefault Bool
False (InitFlags -> Flag Bool
simpleProject InitFlags
initFlags) =
Verbosity
-> InstalledPackageIndex
-> SourcePackageDb
-> InitFlags
-> PromptIO ProjectSettings
forall (m :: * -> *).
Interactive m =>
Verbosity
-> InstalledPackageIndex
-> SourcePackageDb
-> InitFlags
-> m ProjectSettings
Simple.createProject
| Bool
otherwise = case InitFlags -> Flag Bool
interactive InitFlags
initFlags of
Flag Bool
False -> Compiler
-> Verbosity
-> InstalledPackageIndex
-> SourcePackageDb
-> InitFlags
-> PromptIO ProjectSettings
forall (m :: * -> *).
Interactive m =>
Compiler
-> Verbosity
-> InstalledPackageIndex
-> SourcePackageDb
-> InitFlags
-> m ProjectSettings
NonInteractive.createProject Compiler
comp
Flag Bool
_ -> Verbosity
-> InstalledPackageIndex
-> SourcePackageDb
-> InitFlags
-> PromptIO ProjectSettings
forall (m :: * -> *).
Interactive m =>
Verbosity
-> InstalledPackageIndex
-> SourcePackageDb
-> InitFlags
-> m ProjectSettings
Interactive.createProject