module Main where import Distribution.Text (display) import Paths_git_sanity (version) import System.Environment import System.Exit import Git.Sanity (analyze) name :: String name = "git-sanity" help :: IO () help = putStrLn $ unlines [ concat ["Usage: ", name, " [check []]" ] , " [--help]" , " [--version]" , "" , " Check only commits in the specified revision range." , "" , "When no is specified, it defaults to HEAD (i.e. the whole history leading to the current commit)." , "" , "In order to integrate nicely as a pre-push githooks (http://git-scm.com/docs/githooks.html)," , "a of 'origin/$branch~1..HEAD'[1] can be used." , "" , "[1] Where 'branch' is a variable defined as 'branch=$(git symbolic-ref --short HEAD)'" ] main :: IO () main = do args <- getArgs run args where check range = do (exitCode, total) <- analyze range if total == 0 then exitWith exitCode else do putStrLn "" putStrLn $ concat [name, ": ", show total, " insane commit(s)."] exitFailure run ["check", range] = check range run ["check"] = check "HEAD" run ["--version"] = putStrLn $ concat [name, ": ", display version] run ["--help"] = help run [] = help run (x:_) = do putStrLn $ concat [name, ": '", x,"' is not a valid command. See '", name, " --help'."] exitWith (ExitFailure 1)