change-monger-0.0: Text/ChangeMonger/Mercurial.hs
module Text.ChangeMonger.Mercurial (hgChanges, hgChangesAll, hgChangesSince) where
import Control.Monad (liftM)
import Text.ChangeMonger.Parse (run)
runHg :: [String] -> IO String
runHg = run "hg"
-- | Ask Mercurial for changes in general; we accept an options argument which
-- will be passed onto Mercurial, so you can customize by using any of the many
-- options to 'log' which Mercurial understands.
hgChanges :: String -> IO String
hgChanges a = runHg ["log", a]
-- | Nothing fancy: just get the entire repository history.
hgChangesAll :: IO String
hgChangesAll = hgChanges ""
-- | Ask Mercurial for all changes, since the last tag. Conscientious folks
-- tag at every release, so this is a good heuristic.
hgChangesSince :: IO String
hgChangesSince = do tags <- liftM lines $ runHg ["tags", "--quiet"]
runHg ["log", "-r", ((release tags) ++ ":tip")]
release :: [String] -> String
release [] = ""
release [""] = ""
-- Extract the most recent tag
release (_:x:_) = x -- ["tip", last-tag, other, tags, and, so, on]
release (_:_) = ""