module Propellor.Debug where import Control.Monad.IfElse import System.IO import System.Log.Logger import System.Log.Formatter import System.Log.Handler (setFormatter) import System.Log.Handler.Simple import Control.Applicative import Prelude import Utility.Monad import Utility.Env import Utility.Exception import Utility.Process import Utility.Directory debug :: [String] -> IO () debug :: [String] -> IO () debug = String -> String -> IO () debugM String "propellor" (String -> IO ()) -> ([String] -> String) -> [String] -> IO () forall b c a. (b -> c) -> (a -> b) -> a -> c . [String] -> String unwords checkDebugMode :: IO () checkDebugMode :: IO () checkDebugMode = Maybe String -> IO () go (Maybe String -> IO ()) -> IO (Maybe String) -> IO () forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< String -> IO (Maybe String) getEnv String "PROPELLOR_DEBUG" where go :: Maybe String -> IO () go (Just String "1") = IO () enableDebugMode go (Just String _) = IO () forall (m :: * -> *). Monad m => m () noop go Maybe String Nothing = IO Bool -> IO () -> IO () forall (m :: * -> *). Monad m => m Bool -> m () -> m () whenM (String -> IO Bool doesDirectoryExist String ".git") (IO () -> IO ()) -> IO () -> IO () forall a b. (a -> b) -> a -> b $ IO Bool -> IO () -> IO () forall (m :: * -> *). Monad m => m Bool -> m () -> m () whenM (String -> [String] -> Bool forall a. Eq a => a -> [a] -> Bool forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool elem String "1" ([String] -> Bool) -> (String -> [String]) -> String -> Bool forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> [String] lines (String -> Bool) -> IO String -> IO Bool forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> IO String getgitconfig) IO () enableDebugMode getgitconfig :: IO String getgitconfig = String -> IO String -> IO String forall (m :: * -> *) a. MonadCatch m => a -> m a -> m a catchDefaultIO String "" (IO String -> IO String) -> IO String -> IO String forall a b. (a -> b) -> a -> b $ String -> [String] -> IO String readProcess String "git" [String "config", String "propellor.debug"] enableDebugMode :: IO () enableDebugMode :: IO () enableDebugMode = do GenericHandler Handle f <- GenericHandler Handle -> LogFormatter (GenericHandler Handle) -> GenericHandler Handle forall a. LogHandler a => a -> LogFormatter a -> a setFormatter (GenericHandler Handle -> LogFormatter (GenericHandler Handle) -> GenericHandler Handle) -> IO (GenericHandler Handle) -> IO (LogFormatter (GenericHandler Handle) -> GenericHandler Handle) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Handle -> Priority -> IO (GenericHandler Handle) streamHandler Handle stderr Priority DEBUG IO (LogFormatter (GenericHandler Handle) -> GenericHandler Handle) -> IO (LogFormatter (GenericHandler Handle)) -> IO (GenericHandler Handle) forall a b. IO (a -> b) -> IO a -> IO b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> LogFormatter (GenericHandler Handle) -> IO (LogFormatter (GenericHandler Handle)) forall a. a -> IO a forall (f :: * -> *) a. Applicative f => a -> f a pure (String -> LogFormatter (GenericHandler Handle) forall a. String -> LogFormatter a simpleLogFormatter String "[$time] $msg") String -> (Logger -> Logger) -> IO () updateGlobalLogger String rootLoggerName ((Logger -> Logger) -> IO ()) -> (Logger -> Logger) -> IO () forall a b. (a -> b) -> a -> b $ Priority -> Logger -> Logger setLevel Priority DEBUG (Logger -> Logger) -> (Logger -> Logger) -> Logger -> Logger forall b c a. (b -> c) -> (a -> b) -> a -> c . [GenericHandler Handle] -> Logger -> Logger forall a. LogHandler a => [a] -> Logger -> Logger setHandlers [GenericHandler Handle f]