packages feed

change-monger-0.0: ChangeMonger.hs

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