summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess2014-11-25 18:55:07 -0400
committerJoey Hess2014-11-25 18:55:12 -0400
commite07dc9b1d336e86ce51b2a94fcfa943cc1650afd (patch)
treed2a508a12c41be061c51621c085b79e39efb4cb1
parent7d0f79a0c7656a0dd68235c93e2f770b0b1b6ea3 (diff)
propellor.debug can be set in the git config to enable more persistent debugging output.
-rw-r--r--debian/changelog2
-rw-r--r--doc/debugging.mdwn5
-rw-r--r--doc/usage.mdwn12
-rw-r--r--src/Propellor/Message.hs25
4 files changed, 34 insertions, 10 deletions
diff --git a/debian/changelog b/debian/changelog
index 8d0c9316..17801470 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -19,6 +19,8 @@ propellor (1.1.0) UNRELEASED; urgency=medium
commit.
* cron.runPropellor now runs propellor, rather than using its Makefile.
This is more robust.
+ * propellor.debug can be set in the git config to enable more persistent
+ debugging output.
-- Joey Hess <joeyh@debian.org> Sat, 22 Nov 2014 00:12:35 -0400
diff --git a/doc/debugging.mdwn b/doc/debugging.mdwn
index f656ac43..acceca86 100644
--- a/doc/debugging.mdwn
+++ b/doc/debugging.mdwn
@@ -1,5 +1,6 @@
-Set `PROPELLOR_DEBUG=1` to make propellor print out all the commands it runs
-and any other debug messages that Properties choose to emit.
+Set `PROPELLOR_DEBUG=1` in the environment, or `git config propellor.debug 1`
+to make propellor print out all the commands it runs and any other debug
+messages that Properties choose to emit.
Another handy debugging tip is to load up your config.hs in ghci, and look
at `hosts`. This will show the Properties of a Host, as well as the Info
diff --git a/doc/usage.mdwn b/doc/usage.mdwn
index 093ec34e..6ef2e965 100644
--- a/doc/usage.mdwn
+++ b/doc/usage.mdwn
@@ -101,6 +101,18 @@ and configured in haskell.
Set `PROPELLOR_DEBUG=1` to make propellor output each command it runs and
other debugging information.
+# GIT CONFIGURATION
+
+`git config propellor.debug 1` will configure propellor to output debugging
+information.
+
+The usual git configuration controls which centralized repository (if any)
+propellor pushes and pulls from.
+
+Additionally, the url of a remote named "deploy", if it exists
+in your ~/.propellor/ repository, is used as the origin url for
+the other repositories.
+
# SH AUTHOR
Joey Hess <id@joeyh.name>
diff --git a/src/Propellor/Message.hs b/src/Propellor/Message.hs
index 09a92538..49dc4934 100644
--- a/src/Propellor/Message.hs
+++ b/src/Propellor/Message.hs
@@ -11,10 +11,13 @@ import System.Log.Handler.Simple
import "mtl" Control.Monad.Reader
import Data.Maybe
import Control.Applicative
+import System.Directory
+import Control.Monad.IfElse
import Propellor.Types
import Utility.Monad
import Utility.Env
+import Utility.Process
data MessageHandle
= ConsoleMessageHandle
@@ -99,17 +102,23 @@ colorLine h intensity color msg = do
putStrLn ""
hFlush stdout
--- | Causes a debug message to be displayed when PROPELLOR_DEBUG=1
debug :: [String] -> IO ()
debug = debugM "propellor" . unwords
checkDebugMode :: IO ()
checkDebugMode = go =<< getEnv "PROPELLOR_DEBUG"
where
- go (Just "1") = do
- f <- setFormatter
- <$> streamHandler stderr DEBUG
- <*> pure (simpleLogFormatter "[$time] $msg")
- updateGlobalLogger rootLoggerName $
- setLevel DEBUG . setHandlers [f]
- go _ = noop
+ go (Just "1") = enableDebugMode
+ go (Just _) = noop
+ go Nothing = whenM (doesDirectoryExist ".git") $
+ whenM (any (== "1") . lines <$> getgitconfig) $
+ enableDebugMode
+ getgitconfig = readProcess "git" ["config", "propellor.debug"]
+
+enableDebugMode :: IO ()
+enableDebugMode = do
+ f <- setFormatter
+ <$> streamHandler stderr DEBUG
+ <*> pure (simpleLogFormatter "[$time] $msg")
+ updateGlobalLogger rootLoggerName $
+ setLevel DEBUG . setHandlers [f]