Merge branch 'joeyconfig'

This commit is contained in:
Joey Hess 2015-05-07 12:18:23 -04:00
commit 49ca7cb93f
4 changed files with 41 additions and 16 deletions

7
debian/changelog vendored
View File

@ -1,3 +1,10 @@
propellor (2.5.0) UNRELEASED; urgency=medium
* cmdProperty' renamed to cmdPropertyEnv to make way for a new,
more generic cmdProperty' (API change)
-- Joey Hess <id@joeyh.name> Thu, 07 May 2015 12:08:34 -0400
propellor (2.4.0) unstable; urgency=medium propellor (2.4.0) unstable; urgency=medium
* Propellor no longer supports Debian wheezy (oldstable). * Propellor no longer supports Debian wheezy (oldstable).

View File

@ -109,7 +109,7 @@ setSourcesListD ls basename = f `File.hasContent` ls `onChange` update
f = "/etc/apt/sources.list.d/" ++ basename ++ ".list" f = "/etc/apt/sources.list.d/" ++ basename ++ ".list"
runApt :: [String] -> Property NoInfo runApt :: [String] -> Property NoInfo
runApt ps = cmdProperty' "apt-get" ps noninteractiveEnv runApt ps = cmdPropertyEnv "apt-get" ps noninteractiveEnv
noninteractiveEnv :: [(String, String)] noninteractiveEnv :: [(String, String)]
noninteractiveEnv = noninteractiveEnv =
@ -170,7 +170,7 @@ buildDep ps = robustly go
buildDepIn :: FilePath -> Property NoInfo buildDepIn :: FilePath -> Property NoInfo
buildDepIn dir = go `requires` installedMin ["devscripts", "equivs"] buildDepIn dir = go `requires` installedMin ["devscripts", "equivs"]
where where
go = cmdProperty' "sh" ["-c", "cd '" ++ dir ++ "' && mk-build-deps debian/control --install --tool 'apt-get -y --no-install-recommends' --remove"] go = cmdPropertyEnv "sh" ["-c", "cd '" ++ dir ++ "' && mk-build-deps debian/control --install --tool 'apt-get -y --no-install-recommends' --remove"]
noninteractiveEnv noninteractiveEnv
-- | Package installation may fail becuse the archive has changed. -- | Package installation may fail becuse the archive has changed.
@ -251,7 +251,7 @@ reConfigure package vals = reconfigure `requires` setselections
forM_ vals $ \(tmpl, tmpltype, value) -> forM_ vals $ \(tmpl, tmpltype, value) ->
hPutStrLn h $ unwords [package, tmpl, tmpltype, value] hPutStrLn h $ unwords [package, tmpl, tmpltype, value]
hClose h hClose h
reconfigure = cmdProperty' "dpkg-reconfigure" ["-fnone", package] noninteractiveEnv reconfigure = cmdPropertyEnv "dpkg-reconfigure" ["-fnone", package] noninteractiveEnv
-- | Ensures that a service is installed and running. -- | Ensures that a service is installed and running.
-- --

View File

@ -3,6 +3,7 @@
module Propellor.Property.Cmd ( module Propellor.Property.Cmd (
cmdProperty, cmdProperty,
cmdProperty', cmdProperty',
cmdPropertyEnv,
scriptProperty, scriptProperty,
userScriptProperty, userScriptProperty,
) where ) where
@ -10,6 +11,7 @@ module Propellor.Property.Cmd (
import Control.Applicative import Control.Applicative
import Data.List import Data.List
import "mtl" Control.Monad.Reader import "mtl" Control.Monad.Reader
import System.Process (CreateProcess)
import Propellor.Types import Propellor.Types
import Propellor.Property import Propellor.Property
@ -20,12 +22,19 @@ import Utility.Env
-- --
-- The command must exit 0 on success. -- The command must exit 0 on success.
cmdProperty :: String -> [String] -> Property NoInfo cmdProperty :: String -> [String] -> Property NoInfo
cmdProperty cmd params = cmdProperty' cmd params [] cmdProperty cmd params = cmdProperty' cmd params id
cmdProperty' :: String -> [String] -> (CreateProcess -> CreateProcess) -> Property NoInfo
cmdProperty' cmd params mkprocess = property desc $ liftIO $ do
toResult <$> boolSystem' cmd (map Param params) mkprocess
where
desc = unwords $ cmd : params
-- | A property that can be satisfied by running a command, -- | A property that can be satisfied by running a command,
-- with added environment. -- with added environment variables in addition to the standard
cmdProperty' :: String -> [String] -> [(String, String)] -> Property NoInfo -- environment.
cmdProperty' cmd params env = property desc $ liftIO $ do cmdPropertyEnv :: String -> [String] -> [(String, String)] -> Property NoInfo
cmdPropertyEnv cmd params env = property desc $ liftIO $ do
env' <- addEntries env <$> getEnvironment env' <- addEntries env <$> getEnvironment
toResult <$> boolSystemEnv cmd (map Param params) (Just env') toResult <$> boolSystemEnv cmd (map Param params) (Just env')
where where

View File

@ -1,6 +1,6 @@
{- safely running shell commands {- safely running shell commands
- -
- Copyright 2010-2013 Joey Hess <id@joeyh.name> - Copyright 2010-2015 Joey Hess <id@joeyh.name>
- -
- License: BSD-2-clause - License: BSD-2-clause
-} -}
@ -44,23 +44,32 @@ toCommand = concatMap unwrap
- if it succeeded or failed. - if it succeeded or failed.
-} -}
boolSystem :: FilePath -> [CommandParam] -> IO Bool boolSystem :: FilePath -> [CommandParam] -> IO Bool
boolSystem command params = boolSystemEnv command params Nothing boolSystem command params = boolSystem' command params id
boolSystemEnv :: FilePath -> [CommandParam] -> Maybe [(String, String)] -> IO Bool boolSystem' :: FilePath -> [CommandParam] -> (CreateProcess -> CreateProcess) -> IO Bool
boolSystemEnv command params environ = dispatch <$> safeSystemEnv command params environ boolSystem' command params mkprocess = dispatch <$> safeSystem' command params mkprocess
where where
dispatch ExitSuccess = True dispatch ExitSuccess = True
dispatch _ = False dispatch _ = False
boolSystemEnv :: FilePath -> [CommandParam] -> Maybe [(String, String)] -> IO Bool
boolSystemEnv command params environ = boolSystem' command params $
\p -> p { env = environ }
{- Runs a system command, returning the exit status. -} {- Runs a system command, returning the exit status. -}
safeSystem :: FilePath -> [CommandParam] -> IO ExitCode safeSystem :: FilePath -> [CommandParam] -> IO ExitCode
safeSystem command params = safeSystemEnv command params Nothing safeSystem command params = safeSystem' command params id
safeSystem' :: FilePath -> [CommandParam] -> (CreateProcess -> CreateProcess) -> IO ExitCode
safeSystem' command params mkprocess = do
(_, _, _, pid) <- createProcess p
waitForProcess pid
where
p = mkprocess $ proc command (toCommand params)
safeSystemEnv :: FilePath -> [CommandParam] -> Maybe [(String, String)] -> IO ExitCode safeSystemEnv :: FilePath -> [CommandParam] -> Maybe [(String, String)] -> IO ExitCode
safeSystemEnv command params environ = do safeSystemEnv command params environ = safeSystem' command params $
(_, _, _, pid) <- createProcess (proc command $ toCommand params) \p -> p { env = environ }
{ env = environ }
waitForProcess pid
{- Wraps a shell command line inside sh -c, allowing it to be run in a {- Wraps a shell command line inside sh -c, allowing it to be run in a
- login shell that may not support POSIX shell, eg csh. -} - login shell that may not support POSIX shell, eg csh. -}