import Lentil.Types import Lentil.Args import Lentil.File import Lentil.Print import Lentil.Query import Lentil.Export import Options.Applicative import qualified Data.Maybe as M import Data.Monoid -- TODO: compile with O2? [refactor] main :: IO () main = execParser opts >>= runLentil where opts = info (helpOvert <*> lOpts <* version) ( fullDesc <> header "lentil - a frugal issue tracker" ) -- overt help text (even in condensed help) helpOvert :: Parser (a -> a) helpOvert = abortOption ShowHelpText $ mconcat [ long "help", short 'h', help "Show this help text" ] version = infoOption versionCopy ( long "version" <> short 'v' <> help "show version and copyright info" ) where versionCopy = "lentil - a frugal issue tracker, version 0.1.1.0\n\ \(C) 2015 Francesco Ariis - http://www.ariis.it\n\ \released under the GNU General Public License 3" -- TODO: clean these nested ifs up [lint] runLentil :: LOptions -> IO () runLentil lo = uncurry findIssues (loInExcl lo) >>= \is -> -- grab issues let fil = filterAnd (loFilters lo) is -- filtered ord = chainSorts fil (loSort lo) in -- ordered case loOutFile lo of -- std output Nothing -> case loFormat lo of Csv -> putStrLn (issues2CSV is) Pretty -> putStrLn (ppIssues True ord) TagPop -> putStrLn (ppPopularity True is) Just fp -> case loFormat lo of Csv -> writeFile fp (issues2CSV is) Pretty -> writeFile fp (ppIssues False ord) TagPop -> writeFile fp (ppPopularity False is)