diff --git a/git_cl.py b/git_cl.py index a93a04b27a..b34edcf38d 100755 --- a/git_cl.py +++ b/git_cl.py @@ -24,6 +24,7 @@ except ImportError: pass +from third_party import colorama from third_party import upload import breakpad # pylint: disable=W0611 import fix_encoding @@ -41,6 +42,8 @@ DESCRIPTION_BACKUP_FILE = '~/.git_cl_description_backup' GIT_INSTRUCTIONS_URL = 'http://code.google.com/p/chromium/wiki/UsingNewGit' CHANGE_ID = 'Change-Id:' +# Shortcut since it quickly becomes redundant. +Fore = colorama.Fore # Initialized in main() settings = None @@ -1101,7 +1104,17 @@ def CMDcomments(parser, args): if cl.GetIssue(): data = cl.RpcServer().get_issue_properties(cl.GetIssue(), True) for message in sorted(data['messages'], key=lambda x: x['date']): - print '\n%s %s' % (message['date'].split('.', 1)[0], message['sender']) + if message['disapproval']: + color = Fore.RED + elif message['approval']: + color = Fore.GREEN + elif message['sender'] == data['owner_email']: + color = Fore.MAGENTA + else: + color = Fore.BLUE + print '\n%s%s %s%s' % ( + color, message['date'].split('.', 1)[0], message['sender'], + Fore.RESET) if message['text'].strip(): print '\n'.join(' ' + l for l in message['text'].splitlines()) return 0 @@ -1994,6 +2007,7 @@ def main(argv): '\nYour python version %s is unsupported, please upgrade.\n' % sys.version.split(' ', 1)[0]) return 2 + # Reload settings. global settings settings = Settings() @@ -2040,5 +2054,8 @@ def main(argv): if __name__ == '__main__': + # These affect sys.stdout so do it outside of main() to simplify mocks in + # unit testing. fix_encoding.fix_encoding() + colorama.init() sys.exit(main(sys.argv[1:])) diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py index bb907f2ccb..01c5b583c7 100755 --- a/tests/git_cl_test.py +++ b/tests/git_cl_test.py @@ -455,23 +455,24 @@ class TestGitCl(TestCase): def test_reviewer_send_mail_no_rev(self): # Fails without a reviewer. - class FileMock(object): - buf = StringIO.StringIO() - def write(self, content): - self.buf.write(content) - - mock = FileMock() + stdout = StringIO.StringIO() + stderr = StringIO.StringIO() try: self.calls = self._upload_no_rev_calls(None, None) def RunEditor(desc, _, **kwargs): return desc self.mock(git_cl.gclient_utils, 'RunEditor', RunEditor) - self.mock(sys, 'stderr', mock) + self.mock(sys, 'stdout', stdout) + self.mock(sys, 'stderr', stderr) git_cl.main(['upload', '--send-mail']) self.fail() except SystemExit: - self.assertEquals( - 'Must specify reviewers to send email.\n', mock.buf.getvalue()) + self.assertEqual( + 'Using 50% similarity for rename/copy detection. Override with ' + '--similarity.\n', + stdout.getvalue()) + self.assertEqual( + 'Must specify reviewers to send email.\n', stderr.getvalue()) def test_dcommit(self): self.calls = (