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)]