From 109cb9d31ff9524b637cbbb1ddff9c21dd4a9411 Mon Sep 17 00:00:00 2001 From: "maruel@chromium.org" Date: Wed, 14 Sep 2011 20:03:11 +0000 Subject: [PATCH] Print diagnosis message when a task is Ctrl-C'ed out R=dpranke@chromium.org BUG= TEST= Review URL: http://codereview.chromium.org/7891058 git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@101133 0039d316-1c4b-4281-b951-d872f2087c98 --- gclient_utils.py | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/gclient_utils.py b/gclient_utils.py index 9be529cc0..89050b7ad 100644 --- a/gclient_utils.py +++ b/gclient_utils.py @@ -343,26 +343,31 @@ def CheckCallAndFilter(args, stdout=None, filter_fn=None, # This has to be done on a per byte basis to make sure it is not buffered: # normally buffering is done for each line, but if svn requests input, no # end-of-line character is output after the prompt and it would not show up. - in_byte = kid.stdout.read(1) - if in_byte: - if call_filter_on_first_line: - filter_fn(None) - in_line = '' - while in_byte: - if in_byte != '\r': - if print_stdout: - stdout.write(in_byte) - if in_byte != '\n': - in_line += in_byte - else: - filter_fn(in_line) - in_line = '' - in_byte = kid.stdout.read(1) - # Flush the rest of buffered output. This is only an issue with - # stdout/stderr not ending with a \n. - if len(in_line): - filter_fn(in_line) - rv = kid.wait() + try: + in_byte = kid.stdout.read(1) + if in_byte: + if call_filter_on_first_line: + filter_fn(None) + in_line = '' + while in_byte: + if in_byte != '\r': + if print_stdout: + stdout.write(in_byte) + if in_byte != '\n': + in_line += in_byte + else: + filter_fn(in_line) + in_line = '' + in_byte = kid.stdout.read(1) + # Flush the rest of buffered output. This is only an issue with + # stdout/stderr not ending with a \n. + if len(in_line): + filter_fn(in_line) + rv = kid.wait() + except KeyboardInterrupt: + print >> sys.stderr, 'Failed while running "%s"' % ' '.join(args) + raise + if rv: raise subprocess2.CalledProcessError( rv, args, kwargs.get('cwd', None), None, None)