module DisTract.IOUtils
(loadAndUpdateAll,
loadAll,
updateAndLoadBug)
where
import DisTract.Bug
import DisTract.Layout
import DisTract.Parsers
import DisTract.Monotone.Interaction
import DisTract.Types
import Data.List
import Data.Either
import Data.Maybe
import Control.Monad
import System.Directory
loadAndUpdateAll :: Config -> IO [Maybe Bug]
loadAndUpdateAll config
= loadAllBugIds config >>= mapM (updateAndLoadBug config)
loadAll :: Config -> IO [Maybe Bug]
loadAll config
= loadAllBugIds config >>= mapM (loadBug config)
loadAllBugIds :: Config -> IO [BugId]
loadAllBugIds config
= do { baseBranch <- mtnFindCurrentBranch config bugs
; branches <- mtnGetBranches config
; let bugBranches = filter (isPrefixOf (baseBranch ++ "."))
branches
; return $ let len = 1 + length baseBranch
in map (dieErr . findBugId . drop len)
bugBranches
}
dieErr :: (Show a) => Either a b -> b
dieErr (Left a) = error $ show a
dieErr (Right b) = b
updateAndLoadBug :: Config -> BugId -> IO (Maybe Bug)
updateAndLoadBug config bugId
= do { exists <- doesDirectoryExist path
; if exists
then mtnUpdate config path Nothing
else return ()
; loadBug config bugId
}
where
path = bugIdToPath config bugId