Index: tools/rebaseline.py |
=================================================================== |
--- tools/rebaseline.py (revision 11062) |
+++ tools/rebaseline.py (working copy) |
@@ -94,47 +94,42 @@ |
class _InternalException(Exception): |
pass |
-# Object that handles exceptions, either raising them immediately or collecting |
-# them to display later on. |
class ExceptionHandler(object): |
+ """ Object that handles exceptions, either raising them immediately or |
+ collecting them to display later on.""" |
# params: |
- # keep_going_on_failure: if False, report failures and quit right away; |
- # if True, collect failures until |
- # ReportAllFailures() is called |
def __init__(self, keep_going_on_failure=False): |
+ """ |
+ params: |
+ keep_going_on_failure: if False, report failures and quit right away; |
+ if True, collect failures until |
+ ReportAllFailures() is called |
+ """ |
self._keep_going_on_failure = keep_going_on_failure |
self._failures_encountered = [] |
- self._exiting = False |
- # Exit the program with the given status value. |
- def _Exit(self, status=1): |
- self._exiting = True |
- sys.exit(status) |
+ def RaiseExceptionOrContinue(self): |
+ """ We have encountered an exception; either collect the info and keep |
+ going, or exit the program right away.""" |
+ # Get traceback information about the most recently raised exception. |
+ exc_info = sys.exc_info() |
- # We have encountered an exception; either collect the info and keep going, |
- # or exit the program right away. |
- def RaiseExceptionOrContinue(self, e): |
- # If we are already quitting the program, propagate any exceptions |
- # so that the proper exit status will be communicated to the shell. |
- if self._exiting: |
- raise e |
- |
if self._keep_going_on_failure: |
- print >> sys.stderr, 'WARNING: swallowing exception %s' % e |
- self._failures_encountered.append(e) |
+ print >> sys.stderr, ('WARNING: swallowing exception %s' % |
+ repr(exc_info[1])) |
+ self._failures_encountered.append(exc_info) |
else: |
- print >> sys.stderr, e |
print >> sys.stderr, ( |
'Halting at first exception; to keep going, re-run ' + |
'with the --keep-going-on-failure option set.') |
- self._Exit() |
+ raise exc_info[1], None, exc_info[2] |
def ReportAllFailures(self): |
if self._failures_encountered: |
print >> sys.stderr, ('Encountered %d failures (see above).' % |
len(self._failures_encountered)) |
- self._Exit() |
+ sys.exit(1) |
# Object that rebaselines a JSON expectations file (not individual image files). |
@@ -272,7 +267,10 @@ |
expectations_input_filepath = os.path.join( |
self._expectations_root, builder, self._expectations_input_filename) |
expectations_dict = gm_json.LoadFromFile(expectations_input_filepath) |
- expected_results = expectations_dict[gm_json.JSONKEY_EXPECTEDRESULTS] |
+ expected_results = expectations_dict.get(gm_json.JSONKEY_EXPECTEDRESULTS) |
+ if not expected_results: |
+ expected_results = {} |
+ expectations_dict[gm_json.JSONKEY_EXPECTEDRESULTS] = expected_results |
# Update the expectations in memory, skipping any tests/configs that |
# the caller asked to exclude. |
@@ -330,7 +328,6 @@ |
'of ACTUALS_BASE_URL) to read a summary of results ' |
'from; defaults to %(default)s'), |
default='actual-results.json') |
-# TODO(epoger): Add test that exercises --add-new argument. |
parser.add_argument('--add-new', action='store_true', |
help=('in addition to the standard behavior of ' |
'updating expectations for failing tests, add ' |
@@ -417,10 +414,13 @@ |
mark_unreviewed=args.unreviewed) |
try: |
rebaseliner.RebaselineSubdir(builder=builder) |
- except BaseException as e: |
- exception_handler.RaiseExceptionOrContinue(e) |
+ except: |
+ exception_handler.RaiseExceptionOrContinue() |
else: |
- exception_handler.RaiseExceptionOrContinue(_InternalException( |
- 'expectations_json_file %s not found' % expectations_json_file)) |
+ try: |
+ raise _InternalException('expectations_json_file %s not found' % |
+ expectations_json_file) |
+ except: |
+ exception_handler.RaiseExceptionOrContinue() |
exception_handler.ReportAllFailures() |