summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnish Athalye <me@anishathalye.com>2018-11-21 19:50:46 -0500
committerAnish Athalye <me@anishathalye.com>2018-11-21 19:50:46 -0500
commit5e2d40939e567a68eb8f4eecc23752df6f183664 (patch)
tree249a18e202fd1a86fd24841a10db8210d9dfd003
parent8558a5dca0232879c95243747f94a2bf7b8869e4 (diff)
parentdc057866935db382d3be8559d7079b122235ff51 (diff)
Merge branch 'thtliife/suppress-shell-cmd'
-rw-r--r--README.md6
-rw-r--r--dotbot/plugins/shell.py7
-rw-r--r--test/tests/shell-quiet.bash30
3 files changed, 41 insertions, 2 deletions
diff --git a/README.md b/README.md
index 759647e..2416d3a 100644
--- a/README.md
+++ b/README.md
@@ -281,8 +281,9 @@ shell command and the second is an optional human-readable description.
Shell commands support an extended syntax as well, which provides more
fine-grained control. A command can be specified as a dictionary that contains
-the command to be run, a description, and whether `stdin`, `stdout`, and
-`stderr` are enabled. In this syntax, all keys are optional except for the
+the command to be run, a description, whether to suppress outputting the
+command in the display via `quiet`, and whether `stdin`, `stdout`,
+and `stderr` are enabled. In this syntax, all keys are optional except for the
command itself.
#### Example
@@ -296,6 +297,7 @@ command itself.
stdin: true
stdout: true
description: Reading and printing variable
+ quiet: true
-
command: read fail
stderr: true
diff --git a/dotbot/plugins/shell.py b/dotbot/plugins/shell.py
index b6f5184..06a9a89 100644
--- a/dotbot/plugins/shell.py
+++ b/dotbot/plugins/shell.py
@@ -22,12 +22,15 @@ class Shell(dotbot.Plugin):
with open(os.devnull, 'w') as devnull:
for item in data:
stdin = stdout = stderr = devnull
+ quiet = False
if defaults.get('stdin', False) == True:
stdin = None
if defaults.get('stdout', False) == True:
stdout = None
if defaults.get('stderr', False) == True:
stderr = None
+ if defaults.get('quiet', False) == True:
+ quiet = True
if isinstance(item, dict):
cmd = item['command']
msg = item.get('description', None)
@@ -37,6 +40,8 @@ class Shell(dotbot.Plugin):
stdout = None if item['stdout'] == True else devnull
if 'stderr' in item:
stderr = None if item['stderr'] == True else devnull
+ if 'quiet' in item:
+ quiet = True if item['quiet'] == True else False
elif isinstance(item, list):
cmd = item[0]
msg = item[1] if len(item) > 1 else None
@@ -45,6 +50,8 @@ class Shell(dotbot.Plugin):
msg = None
if msg is None:
self._log.lowinfo(cmd)
+ elif quiet:
+ self._log.lowinfo('%s' % msg)
else:
self._log.lowinfo('%s [%s]' % (msg, cmd))
executable = os.environ.get('SHELL')
diff --git a/test/tests/shell-quiet.bash b/test/tests/shell-quiet.bash
new file mode 100644
index 0000000..a69f6c5
--- /dev/null
+++ b/test/tests/shell-quiet.bash
@@ -0,0 +1,30 @@
+test_description='shell command can be suppressed in output'
+. '../test-lib.bash'
+
+# when not quiet, expect to see command that was run
+test_expect_success 'run' '
+(run_dotbot | grep "echo banana") <<EOF
+- shell:
+ - command: echo banana
+ description: echoing a thing...
+EOF
+'
+
+# when quiet, expect command to be suppressed
+test_expect_success 'run 2' '
+(run_dotbot | (! grep "echo banana")) <<EOF
+- shell:
+ - command: echo banana
+ description: echoing a thing...
+ quiet: true
+EOF
+'
+
+# when no description, expect to see command
+test_expect_success 'run 3' '
+(run_dotbot | grep "echo banana") <<EOF
+- shell:
+ - command: echo banana
+ quiet: true
+EOF
+'