summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2015-01-02 10:58:07 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2015-01-02 11:09:19 +0000
commit1cae2ef7ad302c1da6f17ee3c632800e69ae6a8a (patch)
tree43de20a3f321d3f9612dc19632731e5e823cea74
parentf33748d6e6795751e7ea628d5f4e8478353a88ee (diff)
downloadmorph-1cae2ef7ad302c1da6f17ee3c632800e69ae6a8a.tar.gz
Fix logging and display of commandlines being executed by Morph
We were attempting to display commandlines with correct shell-escaping, but the logic was super broken so users would end up seeing this sort of thing instead: 2015-01-02 10:25:42 # g | i | t | | r | e | v | - | p | a | r | s | e | | - | - | v | e | r | i | f | y | | ' | 9 | 8 | f | e | a | 8 | 7 | b | 7 | 2 | 7 | 2 | 5 | 3 | e | 7 | f | f | 8 | 1 | 0 | 5 | 4 | 3 | 4 | c | 9 | e | a | 9 | 0 | 2 | b | b | 6 | a | 6 | f | 7 | e | ^ | { | c | o | m | m | i | t | } | ' Commandlines should now display as intended, more like this: 2015-01-02 10:57:17 # git rev-parse --verify '9df9643842e4b4d8ece710fe6105f32fa38a0d22^{commit}' This broken logic was introduced as a post-review fixup in merge commit c57952ef44a0f1f161441970fcf2f27a39b0de7c.
-rw-r--r--morphlib/app.py13
1 files changed, 7 insertions, 6 deletions
diff --git a/morphlib/app.py b/morphlib/app.py
index eb0ff3b7..6710e4f0 100644
--- a/morphlib/app.py
+++ b/morphlib/app.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2011-2014 Codethink Limited
+# Copyright (C) 2011-2015 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -361,12 +361,13 @@ class Morph(cliapp.Application):
if print_command:
# Print the command line
- commands = [argv] + list(args)
- for command in commands:
+ commands = []
+ for command in [argv] + list(args):
if isinstance(command, list):
- for i in xrange(0, len(command)):
- command[i] = str(command[i])
- commands = ' '.join(map(pipes.quote, command))
+ 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),