module Main (main) where import System.Environment (getArgs) import System.Directory (doesDirectoryExist) import System.IO.Unsafe (unsafePerformIO) import Text.ChangeMonger.Darcs (darcsChangesSince) import Text.ChangeMonger.Git (gitChangesSince) import Text.ChangeMonger.Subversion (svnChangesAll) import Text.ChangeMonger.Mercurial (hgChangesSince) import Text.ChangeMonger.CVS (cvsChangesAll) main :: IO () main = do args <- getArgs if null args then dirsParsePrint "ChangeLog" else dirsParsePrint (head args) dirsParsePrint :: FilePath -> IO () dirsParsePrint s = case dirs of "_darcs" -> write s darcsChangesSince ".git" -> write s gitChangesSince ".svn" -> write s svnChangesAll ".hg" -> write s hgChangesSince "CVS" -> write s cvsChangesAll _ -> error "No understood VCSes found." write :: FilePath -> IO String -> IO () write fle cmd = cmd >>= writeFile fle dirFilter :: [(a, Bool)] -> a dirFilter (x:xs) | snd x == True = fst x | otherwise = dirFilter xs dirs :: FilePath dirs = dirFilter $ map (\(x,_) -> (x, unsafePerformIO $ doesDirectoryExist x)) directories directories :: [(FilePath, Bool)] directories = [("_darcs", False), (".git", False), (".svn", False), (".hg", False), ("CVS", False)]