mem-info-0.4.0.0: test/MemInfo/Files/Root.hs
{-# LANGUAGE OverloadedStrings #-}
module MemInfo.Files.Root (
-- * functions
useTmp,
writeRootedFile,
initRoot,
clearDirectory,
) where
import Data.Text (Text)
import qualified Data.Text.IO as Text
import Fmt ((+|), (|+))
import System.Directory (
createDirectoryIfMissing,
listDirectory,
removePathForcibly,
)
import System.FilePath (takeDirectory, (</>))
import System.IO.Temp (withSystemTempDirectory)
import System.MemInfo.SysInfo (
KernelVersion,
)
useTmp :: (FilePath -> IO a) -> IO a
useTmp = withSystemTempDirectory "mem-info"
writeRootedFile :: FilePath -> FilePath -> Text -> IO ()
writeRootedFile root path txt = do
let target = root </> path
createDirectoryIfMissing True $ takeDirectory target
Text.writeFile target txt
initRoot :: FilePath -> KernelVersion -> IO ()
initRoot root version = do
clearDirectory root
writeRootedFile root "sys/kernel/osrelease" $ fmtKernelVersion version
clearDirectory :: FilePath -> IO ()
clearDirectory fp = listDirectory fp >>= mapM_ removePathForcibly
fmtKernelVersion :: KernelVersion -> Text
fmtKernelVersion (major, minor, patch) =
"" +| toInteger major |+ "." +| toInteger minor |+ "." +| toInteger patch |+ ""