| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 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 # Copyright (C) 2008 Evan Martin <martine@danga.com> | 6 # Copyright (C) 2008 Evan Martin <martine@danga.com> |
| 7 | 7 |
| 8 """A git-command for integrating reviews on Rietveld and Gerrit.""" | 8 """A git-command for integrating reviews on Rietveld and Gerrit.""" |
| 9 | 9 |
| 10 from __future__ import print_function | 10 from __future__ import print_function |
| 11 | 11 |
| 12 from distutils.version import LooseVersion | 12 from distutils.version import LooseVersion |
| 13 from multiprocessing.pool import ThreadPool | 13 from multiprocessing.pool import ThreadPool |
| 14 import base64 | 14 import base64 |
| 15 import collections | 15 import collections |
| 16 import httplib | 16 import httplib |
| 17 import json | 17 import json |
| 18 import logging | 18 import logging |
| 19 import multiprocessing | 19 import multiprocessing |
| 20 import optparse | 20 import optparse |
| 21 import os | 21 import os |
| 22 import re | 22 import re |
| 23 import stat | 23 import stat |
| 24 import sys | 24 import sys |
| 25 import textwrap | 25 import textwrap |
| 26 import time | |
| 27 import traceback | 26 import traceback |
| 28 import urllib | 27 import urllib |
| 29 import urllib2 | 28 import urllib2 |
| 30 import urlparse | 29 import urlparse |
| 31 import uuid | 30 import uuid |
| 32 import webbrowser | 31 import webbrowser |
| 33 import zlib | 32 import zlib |
| 34 | 33 |
| 35 try: | 34 try: |
| 36 import readline # pylint: disable=F0401,W0611 | 35 import readline # pylint: disable=F0401,W0611 |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 LooseVersion(version[len(prefix):]) >= LooseVersion(min_version)) | 140 LooseVersion(version[len(prefix):]) >= LooseVersion(min_version)) |
| 142 | 141 |
| 143 | 142 |
| 144 def BranchExists(branch): | 143 def BranchExists(branch): |
| 145 """Return True if specified branch exists.""" | 144 """Return True if specified branch exists.""" |
| 146 code, _ = RunGitWithCode(['rev-parse', '--verify', branch], | 145 code, _ = RunGitWithCode(['rev-parse', '--verify', branch], |
| 147 suppress_stderr=True) | 146 suppress_stderr=True) |
| 148 return not code | 147 return not code |
| 149 | 148 |
| 150 | 149 |
| 150 def time_sleep(seconds): |
| 151 # Use this so that it can be mocked in tests without interfering with python |
| 152 # system machinery. |
| 153 import time # Local import to discourage others from importing time globally. |
| 154 return time.sleep(seconds) |
| 155 |
| 156 |
| 151 def ask_for_data(prompt): | 157 def ask_for_data(prompt): |
| 152 try: | 158 try: |
| 153 return raw_input(prompt) | 159 return raw_input(prompt) |
| 154 except KeyboardInterrupt: | 160 except KeyboardInterrupt: |
| 155 # Hide the exception. | 161 # Hide the exception. |
| 156 sys.exit(1) | 162 sys.exit(1) |
| 157 | 163 |
| 158 | 164 |
| 159 def _git_branch_config_key(branch, key): | 165 def _git_branch_config_key(branch, key): |
| 160 """Helper method to return Git config key for a branch.""" | 166 """Helper method to return Git config key for a branch.""" |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 raise BuildbucketResponseException( | 312 raise BuildbucketResponseException( |
| 307 'Buildbucket returns invalid json content: %s.\n' | 313 'Buildbucket returns invalid json content: %s.\n' |
| 308 'Please file bugs at http://crbug.com, label "Infra-BuildBucket".' % | 314 'Please file bugs at http://crbug.com, label "Infra-BuildBucket".' % |
| 309 content) | 315 content) |
| 310 return content_json | 316 return content_json |
| 311 if response.status < 500 or try_count >= 2: | 317 if response.status < 500 or try_count >= 2: |
| 312 raise httplib2.HttpLib2Error(content) | 318 raise httplib2.HttpLib2Error(content) |
| 313 | 319 |
| 314 # status >= 500 means transient failures. | 320 # status >= 500 means transient failures. |
| 315 logging.debug('Transient errors when %s. Will retry.', operation_name) | 321 logging.debug('Transient errors when %s. Will retry.', operation_name) |
| 316 time.sleep(0.5 + 1.5*try_count) | 322 time_sleep(0.5 + 1.5*try_count) |
| 317 try_count += 1 | 323 try_count += 1 |
| 318 assert False, 'unreachable' | 324 assert False, 'unreachable' |
| 319 | 325 |
| 320 | 326 |
| 321 def _trigger_try_jobs(auth_config, changelist, masters, options, | 327 def _trigger_try_jobs(auth_config, changelist, masters, options, |
| 322 category='git_cl_try', patchset=None): | 328 category='git_cl_try', patchset=None): |
| 323 assert changelist.GetIssue(), 'CL must be uploaded first' | 329 assert changelist.GetIssue(), 'CL must be uploaded first' |
| 324 codereview_url = changelist.GetCodereviewServer() | 330 codereview_url = changelist.GetCodereviewServer() |
| 325 assert codereview_url, 'CL must be uploaded first' | 331 assert codereview_url, 'CL must be uploaded first' |
| 326 patchset = patchset or changelist.GetMostRecentPatchset() | 332 patchset = patchset or changelist.GetMostRecentPatchset() |
| (...skipping 5046 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5373 if __name__ == '__main__': | 5379 if __name__ == '__main__': |
| 5374 # These affect sys.stdout so do it outside of main() to simplify mocks in | 5380 # These affect sys.stdout so do it outside of main() to simplify mocks in |
| 5375 # unit testing. | 5381 # unit testing. |
| 5376 fix_encoding.fix_encoding() | 5382 fix_encoding.fix_encoding() |
| 5377 setup_color.init() | 5383 setup_color.init() |
| 5378 try: | 5384 try: |
| 5379 sys.exit(main(sys.argv[1:])) | 5385 sys.exit(main(sys.argv[1:])) |
| 5380 except KeyboardInterrupt: | 5386 except KeyboardInterrupt: |
| 5381 sys.stderr.write('interrupted\n') | 5387 sys.stderr.write('interrupted\n') |
| 5382 sys.exit(1) | 5388 sys.exit(1) |
| OLD | NEW |