module Distribution.VcsRevision.Svn ( getRevision ) where
import Control.Exception
import System.Process
import System.Exit
import Data.List
tryIO :: IO a -> IO (Either IOException a)
tryIO = try
getRevision :: IO (Maybe (String, Bool))
getRevision = do
res <- tryIO $ readProcessWithExitCode "svn" ["info"] ""
case res of
Left ex -> return Nothing
Right (exit,info,_) -> case exit of
ExitSuccess -> do
let prefix = "Last Changed Rev: "
let rev = drop (length prefix) $ head $ filter (prefix `isPrefixOf`) (lines info)
(_,out,_) <- readProcessWithExitCode "svn" ["st", "-q"] ""
return $ Just (rev, out /= "")
_ -> return Nothing