module Distribution.VcsRevision.Mercurial ( getRevision ) where
import Control.Exception
import System.Process
import System.Exit
tryIO :: IO a -> IO (Either IOException a)
tryIO = try
getRevision :: IO (Maybe (String, Bool))
getRevision = do
res <- tryIO $ readProcessWithExitCode "hg" ["identify", "-i"] ""
case res of
Left ex -> return Nothing
Right (exit,out,_) -> case (exit,init out,last (init out)) of
(ExitSuccess,hash,'+') -> return $ Just (init hash, True)
(ExitSuccess,hash,_) -> return $ Just (hash, False)
(ExitFailure _,_,_) -> return Nothing