module Database.Migrate.Main (defaultMain) where
import qualified Data.Text as T
import Data.Version (showVersion)
import Database.PostgreSQL.Simple
import System.Console.CmdArgs.Explicit
import System.Directory
import System.Exit
usage = [
"usage: migrate [-v|--verbose] [-r|--dry-run] [-t|--test-run] [-a|--auto] [-s|--scripts DIR]"
, " [-h|--host HOSTNAME] [-p|--port PORTNUMBER] [-u|--user USER]"
, " [-P|--password PASSWORD] [-d|--db DATABASE] [-g|--postgres] [-m|--mysql] [VERSION]"
, " migrate -h|--help"
, " migrate -V|--version"
]
data Arguments = Arguments {
printhelp :: Bool
, printversion :: Bool
, dry :: Bool
, test :: Bool
, auto :: Bool
, postgres :: Bool
, mysql :: Bool
, version :: Maybe String
, scripts :: String
} deriving (Eq, Show)
defaultArguments cwd = Arguments {
printhelp = False
, printversion = False
, dry = False
, test = False
, auto = False
, postgres = False
, mysql = False
, version = Nothing
, scripts = cwd
}
migratemode cwd =
mode "migrate" (defaultArguments cwd) "" (flagArg (\v a -> Right $ a { version = Just v }) "VERSION") [
flagNone [ "h", "help" ] (\a -> a { printhelp = True }) ""
, flagNone [ "V", "version" ] (\a -> a { printversion = True }) ""
, flagNone [ "r", "dry-run" ] (\a -> a { dry = True }) ""
, flagNone [ "g", "postgres" ] (\a -> a { postgres = True }) ""
, flagNone [ "m", "mysql" ] (\a -> a { postgres = True }) ""
]
defaultMain =
getCurrentDirectory >>= \cwd -> processArgs (migratemode cwd) >>= run
run args
| printhelp args = mapM_ putStrLn usage
| printversion args = putStrLn $ "migrate " ++ "showVersion Program.version"
| otherwise = migrate args
bomb msg =
putStrLn msg >> exitFailure
migrate args =
case (postgres args, mysql args) of
(False, False) -> bomb "Must specify exactly one of -p or -m for database selection, specified none."
(True, True) -> bomb "Must specify exactly one of -p or -m for database selection, specified two."
(True, _) -> runpostgres args
(_, True) -> runmysql args
runmysql _ =
bomb "Not implemented yet."
runpostgres args =
undefined