summaryrefslogtreecommitdiff
path: root/morphlib
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2015-01-02 10:53:11 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2015-01-02 11:20:59 +0000
commit6f5c4a44a124e018982cffe06fd10e93ea65f446 (patch)
treec114ba7b45457f2dd19cf6de19163faa4fb0b012 /morphlib
parent1cae2ef7ad302c1da6f17ee3c632800e69ae6a8a (diff)
downloadmorph-6f5c4a44a124e018982cffe06fd10e93ea65f446.tar.gz
Improve logic for displaying command execution to user
This avoids writing each command to the log file twice, as we did previously. Also, the user-visible message is now only constructed if we are definitely going to write it to the screen (a tiny optimisation). Hopefully the logic is clearer now too.
Diffstat (limited to 'morphlib')
-rw-r--r--morphlib/app.py40
1 files changed, 24 insertions, 16 deletions
diff --git a/morphlib/app.py b/morphlib/app.py
index 6710e4f0..177bce45 100644
--- a/morphlib/app.py
+++ b/morphlib/app.py
@@ -309,6 +309,11 @@ class Morph(cliapp.Application):
if (submod.url, submod.commit) not in done:
subs_to_process.add((submod.url, submod.commit))
+ def _write_status(self, text):
+ timestamp = time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime())
+ self.output.write('%s %s\n' % (timestamp, text))
+ self.output.flush()
+
def status(self, **kwargs):
'''Show user a status update.
@@ -345,9 +350,20 @@ class Morph(cliapp.Application):
ok = verbose or error or (not quiet and not chatty)
if ok:
- timestamp = time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime())
- self.output.write('%s %s\n' % (timestamp, text))
- self.output.flush()
+ self._write_status(text)
+
+ def _commandline_as_message(self, argv, args):
+ '''Create a status string for a command that's about to be executed.'''
+
+ commands = []
+ for command in [argv] + list(args):
+ if isinstance(command, list):
+ command_str = ' '.join(map(pipes.quote, command))
+ else:
+ command_str = pipes.quote(command)
+ commands.append(command_str)
+
+ return '# ' + ' | '.join(commands)
def _prepare_for_runcmd(self, argv, args, kwargs):
if 'env' not in kwargs:
@@ -359,19 +375,11 @@ class Morph(cliapp.Application):
else:
print_command = True
- if print_command:
- # Print the command line
- commands = []
- for command in [argv] + list(args):
- if isinstance(command, list):
- command_str = ' '.join(map(pipes.quote, command))
- else:
- command_str = pipes.quote(command)
- commands.append(command_str)
-
- self.status(msg='# %(cmdline)s',
- cmdline=' | '.join(commands),
- chatty=True)
+ if print_command and self.settings['verbose']:
+ # Don't call self.status() here, to avoid writing the message to
+ # the log as well as to the console. The cliapp.runcmd() function
+ # will also log the command, and it's messy having it logged twice.
+ self._write_status(self._commandline_as_message(argv, args))
# Log the environment.
prev = getattr(self, 'prev_env', {})