diff options
author | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2015-01-02 10:53:11 +0000 |
---|---|---|
committer | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2015-01-02 11:20:59 +0000 |
commit | 6f5c4a44a124e018982cffe06fd10e93ea65f446 (patch) | |
tree | c114ba7b45457f2dd19cf6de19163faa4fb0b012 /morphlib/app.py | |
parent | 1cae2ef7ad302c1da6f17ee3c632800e69ae6a8a (diff) | |
download | morph-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/app.py')
-rw-r--r-- | morphlib/app.py | 40 |
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', {}) |