From 6c6a0c6d4bbff707203a66ec2be2ef70ccccb69c Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Sun, 12 Jun 2016 11:44:47 +0900 Subject: fix extracting kernel version string --- src/Propellor/Property/Reboot.hs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/Propellor/Property/Reboot.hs') diff --git a/src/Propellor/Property/Reboot.hs b/src/Propellor/Property/Reboot.hs index 01a1add1..c3a1fb87 100644 --- a/src/Propellor/Property/Reboot.hs +++ b/src/Propellor/Property/Reboot.hs @@ -1,3 +1,5 @@ +{-# LANGUAGE OverloadedStrings #-} + module Propellor.Property.Reboot ( now, atEnd, @@ -9,6 +11,7 @@ import Propellor.Base import Data.List import Data.Version +import Text.ParserCombinators.ReadP type KernelVersion = String @@ -60,14 +63,13 @@ toDistroKernel = check (not <$> runningInstalledKernel) now -- ensure that a new enough kernel is running before ensuring other properties. toKernelNewerThan :: KernelVersion -> Property DebianLike toKernelNewerThan ver = property' ("reboot to kernel newer than " ++ ver) $ \w -> - ifM (liftIO $ newerKernelAvailable (Prelude.read ver)) + ifM (liftIO $ newerKernelAvailable (readVersion ver)) (ensureProperty w now, noChange) --- TODO avoid Prelude.read newerKernelAvailable :: Version -> IO Bool newerKernelAvailable wantV = do - runningV <- Prelude.read <$> runningKernelVersion - installedV <- maximum . map Prelude.read <$> installedKernelVersions + runningV <- readVersion <$> runningKernelVersion + installedV <- maximum . map readVersion <$> installedKernelVersions return $ installedV >= wantV && runningV < wantV runningInstalledKernel :: IO Bool @@ -105,4 +107,9 @@ kernelsIn :: FilePath -> IO [FilePath] kernelsIn d = filter ("vmlinu" `isInfixOf`) <$> dirContents d extractKernelVersion :: String -> KernelVersion -extractKernelVersion = unwords . take 1 . dropWhile (/= "version") . words +extractKernelVersion = + unwords . take 1 . drop 1 . dropWhile (/= "version") . words + +-- TODO properly handle error here +readVersion :: String -> Version +readVersion s = (fst . Prelude.last) $ readP_to_S parseVersion s -- cgit v1.2.3