import System.Directory import System.Environment import System.Cmd import Control.Exception import System.Exit import Control.Monad import Text.RegexPR import Data.Maybe import Data.List import YJTools import System.IO import Paths_yjtools_unix import Data.Version main = do prgN <- getProgName args <- getArgs case args of [] -> run ["--version"] -> putStrLn $ "update-portage-cabal-" ++ showVersion version _ -> putStrLn $ "Usage: " ++ prgN ++ " " ++ "[--version]" run = do putStr "FTP Password: " hFlush stdout pswd <- getLineP putStrLn "check sudo password." system "sudo echo 'sudo password is ok'" cabalCont <- getDirectoryContents "." >>= readFile . head . filter (isSuffixOf ".cabal") prtCtgry <- getDirectoryContents "portage/" >>= return . head . filter (elem '-') addrCont <- readFile "address_file" let getField fld = snd . head . snd . fromJust . matchRegexPR ("(?i)" ++ fld ++ "\\:\\s+(.+)") prjName = getField "name" cabalCont version = getField "version" cabalCont address = getField "address" addrCont dir = getField "directory" addrCont user = getField "user" addrCont try $ removeFile $ "/usr/portage/distfiles/" ++ prjName ++ "-" ++ version ++ ".tar.gz" try $ removeFile $ "portage/" ++ prtCtgry ++ "/" ++ prjName ++ "/Manifest" system $ "runhaskell Setup.hs configure" ret <- system $ "runhaskell Setup.hs build" when (ret == ExitSuccess) $ do system $ "runhaskell Setup.hs sdist" ret <- system $ "yjftp put dist/" ++ prjName ++ "-" ++ version ++ ".tar.gz " ++ address ++ dir ++ " " ++ user ++ " -p " ++ pswd case ret of ExitSuccess -> return () ExitFailure _ -> putStrLn "upload source failed" >> exitFailure ex <- doesFileExist $ "portage/" ++ prtCtgry ++ "/" ++ prjName ++ "/" ++ prjName ++ "-" ++ version ++ ".ebuild" when (not ex) $ copyFile ("portage/" ++ prtCtgry ++ "/" ++ prjName ++ "/" ++ prjName ++ ".ebuild.gen") ("portage/" ++ prtCtgry ++ "/" ++ prjName ++ "/" ++ prjName ++ "-" ++ version ++ ".ebuild") system $ "ebuild portage/" ++ prtCtgry ++ "/" ++ prjName ++ "/" ++ prjName ++ "-" ++ version ++ ".ebuild manifest" system $ "sudo ACCEPT_KEYWORDS='~x86' emerge -v " ++ prjName return ()