module Hpack.Convert.Run
( runConvert
)
where
import Prelude ()
import Prelude.Compat
import Control.Monad
import Data.List
import Data.Maybe
import System.Directory
import System.Environment
import System.Exit.Compat
import System.FilePath
import System.FilePath.Glob
import Hpack.Config
import Hpack.Convert
runConvert :: IO ()
runConvert = do
as <- getArgs
(dir, cabalFileFP) <- case as of
(dir:_) -> do
isFile <- doesFileExist dir
if takeExtension dir == ".cabal" && isFile
then return (takeDirectory dir, dir)
else (dir,) <$> findCabalFileFP dir
_ -> do
cwd <- getCurrentDirectory
cabalFileFP <- findCabalFileFP cwd
return (cwd, cabalFileFP)
pkg <- runConvert' dir cabalFileFP
writePackage (dir </> "package.yaml") pkg
putStrLn $ "generated package.yaml based on " ++ cabalFileFP
findCabalFileFP :: FilePath -> IO FilePath
findCabalFileFP dir = do
mcabalFileFP <- listToMaybe <$> globDir1 (compile "*.cabal") dir
case mcabalFileFP of
Nothing -> die "No cabal file in the current directory"
Just cabalFileFP -> return cabalFileFP
runConvert' :: FilePath -> FilePath -> IO Package
runConvert' dir cabalFileFP = do
mpackageYaml <- find (== "package.yaml") <$> getDirectoryContents dir
when (isJust mpackageYaml) $
die $ (dir </> "package.yaml") ++ " already exists"
old <- readFile cabalFileFP
case fromPackageDescriptionString old of
Left err -> die (show err)
Right pkg -> return pkg