postgres-embedded-0.2.0: src/Database/PostgreSQL/Embedded/Download.hs
module Database.PostgreSQL.Embedded.Download
( downloadPostgres
) where
import System.Process (rawSystem)
import Data.Monoid ((<>))
import System.Directory (setCurrentDirectory,
createDirectoryIfMissing,
doesDirectoryExist,
getHomeDirectory)
import System.FilePath.Posix ((</>))
import Database.PostgreSQL.Embedded.Types
import Database.PostgreSQL.Embedded.Exec
data ArchiveType = Zip | Tar deriving (Eq)
downloadPostgres :: Bool -> Os -> Version -> IO FilePath
downloadPostgres silent_ os_ version_ = do
home <- getHomeDirectory
let v = value version_
let workdir = home </> ".postgres-embedded" </> v
let tmp = workdir </> "postgres.tmp"
let dist = workdir </> "pgsql"
let execSystem = if silent_ then rawSystemSilent else rawSystem
createDirectoryIfMissing True workdir
exists <- doesDirectoryExist dist
case exists of
True -> return dist
False -> do
setCurrentDirectory workdir
let (aType, suffix) = binaries os_
_ <- execSystem "wget" ["-O", tmp, base_download_url <> v <> suffix]
_ <- case aType of
Zip -> execSystem "unzip" ["-q", tmp]
Tar -> execSystem "tar" ["-xzf", tmp]
return dist
where
binaries :: Os -> (ArchiveType, String)
binaries OSX = (Zip, "-osx-binaries.zip")
binaries Win = (Zip, "-windows-x64-binaries.zip")
binaries Linux = (Tar, "-linux-x64-binaries.tar.gz")
base_download_url = "http://get.enterprisedb.com/postgresql/postgresql-"