packages feed

stack-hpc-coveralls-0.0.0.1: src/SHC/Paths.hs

-- |
-- Module:      Trace.Hpc.Coveralls.Paths
-- Copyright:   (c) 2014-2015 Guillaume Nargeot
-- License:     BSD3
-- Maintainer:  Guillaume Nargeot <guillaume+hackage@nargeot.com>
-- Stability:   experimental
--
-- Paths constants and functions for hpc coverage report output.

module SHC.Paths
    where

import Control.Monad
import Data.Maybe
import Data.List (isSuffixOf)
import Data.Traversable (traverse)
import System.Directory (
    doesDirectoryExist, getDirectoryContents
    )
import System.Directory.Tree (
    AnchoredDirTree(..), dirTree, readDirectoryWith
    )
import System.FilePath ((</>))
import Trace.Hpc.Tix


tixDir :: FilePath -> FilePath
tixDir = (</> "tix")

mixDir :: FilePath -> FilePath
mixDir = (</> "mix")

getTixPath :: FilePath -> String -> FilePath
getTixPath hpcDir testSuiteName = tixDir hpcDir </> testSuiteName </> getTixFileName testSuiteName

firstExistingDirectory :: [FilePath] -> IO (Maybe FilePath)
firstExistingDirectory = fmap msum . mapM pathIfExist
    where pathIfExist path = do
              pathExists <- doesDirectoryExist path
              return $ if pathExists then Just path else Nothing

dumpDirectory :: FilePath -> IO ()
dumpDirectory path = do
    directoryExists <- doesDirectoryExist path
    unless directoryExists $ putStrLn ("Couldn't find the directory " ++ path)
    putStrLn $ "Dumping " ++ path ++ " directory content:"
    contents <- getDirectoryContents path
    traverse putStrLn contents
    return ()

dumpDirectoryTree :: FilePath -> IO ()
dumpDirectoryTree path = do
    putStrLn $ "Dumping " ++ path ++ " directory tree:"
    tree <- readDirectoryWith return path
    traverse putStrLn $ dirTree tree
    return ()