module Distribution.VcsRevision.Svn ( getRevision ) where

import System.Process
import System.Exit
import Data.List

-- | Nothing if we're not in a svn repo, Just (revision,modified) if we're in a repo.
getRevision :: IO (Maybe (String, Bool))
getRevision = do
    (exit,info,_) <- readProcessWithExitCode "svn" ["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