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 "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 "PROPELLOR_DEBUG" where go :: Maybe String -> IO () go (Just "1") = IO () enableDebugMode go (Just _) = IO () forall (m :: * -> *). Monad m => m () noop go Nothing = IO Bool -> IO () -> IO () forall (m :: * -> *). Monad m => m Bool -> m () -> m () whenM (String -> IO Bool doesDirectoryExist ".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 (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool elem "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 "" (IO String -> IO String) -> IO String -> IO String forall a b. (a -> b) -> a -> b $ String -> [String] -> IO String readProcess "git" ["config", "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 (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> LogFormatter (GenericHandler Handle) -> IO (LogFormatter (GenericHandler Handle)) forall (f :: * -> *) a. Applicative f => a -> f a pure (String -> LogFormatter (GenericHandler Handle) forall a. String -> LogFormatter a simpleLogFormatter "[$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]