Chromium Code Reviews| Index: prebuilt.py |
| diff --git a/prebuilt.py b/prebuilt.py |
| index a029159ed42d849dda1647a30d3873cf11d337b3..64531cb5dbb27eaf7a360fa4928d6619fb8bae2c 100755 |
| --- a/prebuilt.py |
| +++ b/prebuilt.py |
| @@ -73,6 +73,9 @@ class UnknownBoardFormat(Exception): |
| """Raised when a function finds an unknown board format.""" |
| pass |
| +class GitPushFailed(Exception): |
| + """Raised when a git push failed after retry.""" |
| + |
| def UpdateLocalFile(filename, value, key='PORTAGE_BINHOST'): |
| """Update the key in file with the value passed. |
| @@ -117,21 +120,41 @@ def UpdateLocalFile(filename, value, key='PORTAGE_BINHOST'): |
| new_file_fh.close() |
| -def RevGitFile(filename, value): |
| +def RevGitPushWithRetry(retries=5): |
| + """Repo sync and then push git changes in flight. |
| + |
| + Args: |
| + retries: The number of times to retry before giving up, default: 5 |
| + |
| + Raises: |
| + GitPushFailed if push was unsuccessful after retries |
| + """ |
| + for retry in range(retries+1): |
| + try: |
| + cros_build_lib.RunCommand('repo sync .', shell=True) |
| + cros_build_lib.RunCommand('git push', shell=True) |
| + break |
| + except cros_build_lib.RunCommandError: |
| + print 'Error pushing changes trying again (%s/%s)' % (retry, retries) |
|
sosa
2010/11/16 17:28:43
Nit: The last error will say trying again even tho
|
| + else: |
| + raise GitPushFailed('Failed to push change after %s retries' % retries) |
| + |
| + |
| +def RevGitFile(filename, value, retries=5): |
| """Update and push the git file. |
| - Args: |
| - filename: file to modify that is in a git repo already |
| - key: board or host package type e.g. x86-dogfood |
| - value: string representing the version of the prebuilt that has been |
| - uploaded. |
| + Args: |
| + filename: file to modify that is in a git repo already |
| + value: string representing the version of the prebuilt that has been |
| + uploaded. |
| + retries: The number of times to retry before giving up, default: 5 |
| """ |
| prebuilt_branch = 'prebuilt_branch' |
| old_cwd = os.getcwd() |
| os.chdir(os.path.dirname(filename)) |
| - cros_build_lib.RunCommand('repo sync', shell=True) |
| - cros_build_lib.RunCommand('repo start %s .' % prebuilt_branch, shell=True) |
| + cros_build_lib.RunCommand('repo sync .', shell=True) |
| + cros_build_lib.RunCommand('repo start %s .' % prebuilt_branch, shell=True) |
| git_ssh_config_cmd = ( |
| 'git config url.ssh://git@gitrw.chromium.org:9222.pushinsteadof ' |
| 'http://git.chromium.org/git') |
| @@ -142,8 +165,7 @@ def RevGitFile(filename, value): |
| UpdateLocalFile(filename, value) |
| cros_build_lib.RunCommand('git config push.default tracking', shell=True) |
| cros_build_lib.RunCommand('git commit -am "%s"' % description, shell=True) |
| - cros_build_lib.RunCommand('repo sync', shell=True) |
| - cros_build_lib.RunCommand('git push', shell=True) |
| + RevGitPushWithRetry(retries) |
| finally: |
| cros_build_lib.RunCommand('repo abandon %s .' % prebuilt_branch, shell=True) |
| os.chdir(old_cwd) |
| @@ -381,7 +403,7 @@ def DetermineMakeConfFile(target): |
| def UploadPrebuilt(build_path, upload_location, version, binhost_base_url, |
| - board=None, git_sync=False): |
| + board=None, git_sync=False, git_sync_retries=5): |
| """Upload Host prebuilt files to Google Storage space. |
| Args: |
| @@ -391,6 +413,9 @@ def UploadPrebuilt(build_path, upload_location, version, binhost_base_url, |
| host packages. |
| git_sync: If set, update make.conf of target to reference the latest |
| prebuilt packages genereated here. |
| + git_sync_retries: How many times to retry pushing when updating git files. |
| + This helps avoid failures when multiple bots are modifying the same Repo. |
| + default: 5 |
| """ |
| if not board: |
| @@ -426,7 +451,7 @@ def UploadPrebuilt(build_path, upload_location, version, binhost_base_url, |
| if git_sync: |
| url_value = '%s/%s/' % (binhost_base_url, url_suffix) |
| - RevGitFile(git_file, url_value) |
| + RevGitFile(git_file, url_value, retries=git_sync_retries) |
| def usage(parser, msg): |