module Knives.ZfsCheck where
import CommandLine
import Data.List.Split (splitOn)
import Data.Char (isSpace)
import Data.List (isInfixOf)
import qualified Data.ByteString.Lazy as LBS
import qualified Data.ByteString.Lazy.Char8 as LBS8
import System.Process
knifeZfsCheck :: ZfsCheckOptions -> IO ()
knifeZfsCheck _ = do
putStrLn $ "Check the version of archzfs with repo kernel version so you can determine if an upgrade is possible."
let url_zfs = "https://raw.githubusercontent.com/openzfs/zfs/master/META"
repo_version <- readProcess "pacman" ["-Si", "linux"] "" -- | awk '/^Version/ { print $3 }'" ""
archzfs_version <- readProcess "curl" ["-sSL", url_zfs] ""
skernel <- readProcess "uname" ["-r"] ""
sinstalled <- readProcess "pacman" ["-Q", "linux"] ""
let repo = splitAndTrim
$ LBS8.unpack
$ head [v | v <- LBS8.lines (LBS8.pack repo_version), (LBS8.pack "Version") `LBS.isPrefixOf` v]
archzfs = splitAndTrim
$ LBS8.unpack
$ head [v | v <- LBS8.lines (LBS8.pack archzfs_version), (LBS8.pack "Linux-Maximum:") `LBS.isPrefixOf` v]
running = trim skernel
installed = unwords
$ filter (not . ("linux" `isInfixOf`))
$ words
$ trim sinstalled
putStrLn $ "\n repo: " ++ repo
++ "\n zfs: " ++ archzfs
++ "\n running: " ++ running
++ "\n installed: " ++ installed
where
splitAndTrim line = trim $ last $ splitOn ":" line
trim = f . f
where f = reverse . dropWhile isSpace