| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 # TODO(hinoka): Use logging. | 6 # TODO(hinoka): Use logging. |
| 7 | 7 |
| 8 import cStringIO | 8 import cStringIO |
| 9 import codecs | 9 import codecs |
| 10 import collections | 10 import collections |
| 11 import copy | 11 import copy |
| 12 import ctypes | 12 import ctypes |
| 13 import json | 13 import json |
| 14 import optparse | 14 import optparse |
| 15 import os | 15 import os |
| 16 import pprint | 16 import pprint |
| 17 import random |
| 17 import re | 18 import re |
| 18 import socket | 19 import socket |
| 19 import subprocess | 20 import subprocess |
| 20 import sys | 21 import sys |
| 21 import tempfile | 22 import tempfile |
| 22 import time | 23 import time |
| 23 import urllib2 | 24 import urllib2 |
| 24 import urlparse | 25 import urlparse |
| 25 import uuid | 26 import uuid |
| 26 | 27 |
| (...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 result = result_fn(code, outval) | 409 result = result_fn(code, outval) |
| 409 if result in (FAIL, RETRY): | 410 if result in (FAIL, RETRY): |
| 410 print '===Failed in %.1f mins===' % elapsed_time | 411 print '===Failed in %.1f mins===' % elapsed_time |
| 411 print | 412 print |
| 412 else: | 413 else: |
| 413 print '===Succeeded in %.1f mins===' % elapsed_time | 414 print '===Succeeded in %.1f mins===' % elapsed_time |
| 414 print | 415 print |
| 415 return outval | 416 return outval |
| 416 if result is FAIL: | 417 if result is FAIL: |
| 417 break | 418 break |
| 419 if result is RETRY: |
| 420 sleep_backoff = 4 ** attempt |
| 421 sleep_time = random.randint(sleep_backoff, int(sleep_backoff * 1.2)) |
| 422 print '===backing off, sleeping for %d secs===' % sleep_time |
| 423 time.sleep(sleep_time) |
| 418 | 424 |
| 419 raise SubprocessFailed('%s failed with code %d in %s after %d attempts.' % | 425 raise SubprocessFailed('%s failed with code %d in %s after %d attempts.' % |
| 420 (' '.join(args), code, cwd, attempt), | 426 (' '.join(args), code, cwd, attempt), |
| 421 code, outval) | 427 code, outval) |
| 422 | 428 |
| 423 | 429 |
| 424 def git(*args, **kwargs): # pragma: no cover | 430 def git(*args, **kwargs): # pragma: no cover |
| 425 """Wrapper around call specifically for Git commands.""" | 431 """Wrapper around call specifically for Git commands.""" |
| 426 if args and args[0] == 'cache': | 432 if args and args[0] == 'cache': |
| 427 # Rewrite "git cache" calls into "python git_cache.py". | 433 # Rewrite "git cache" calls into "python git_cache.py". |
| (...skipping 1191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1619 except Exception: | 1625 except Exception: |
| 1620 # Unexpected failure. | 1626 # Unexpected failure. |
| 1621 emit_flag(options.flag_file) | 1627 emit_flag(options.flag_file) |
| 1622 raise | 1628 raise |
| 1623 else: | 1629 else: |
| 1624 emit_flag(options.flag_file) | 1630 emit_flag(options.flag_file) |
| 1625 | 1631 |
| 1626 | 1632 |
| 1627 if __name__ == '__main__': | 1633 if __name__ == '__main__': |
| 1628 sys.exit(main()) | 1634 sys.exit(main()) |
| OLD | NEW |