| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 | 2 |
| 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
| 5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
| 6 | 6 |
| 7 """This module uprevs a given package's ebuild to the next revision.""" | 7 """This module uprevs a given package's ebuild to the next revision.""" |
| 8 | 8 |
| 9 | 9 |
| 10 import fileinput | 10 import fileinput |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 | 208 |
| 209 def _PushChange(): | 209 def _PushChange(): |
| 210 """Pushes changes to the git repository. | 210 """Pushes changes to the git repository. |
| 211 | 211 |
| 212 Pushes locals commits from calls to CommitChange to the remote git | 212 Pushes locals commits from calls to CommitChange to the remote git |
| 213 repository specified by os.pwd. | 213 repository specified by os.pwd. |
| 214 | 214 |
| 215 Raises: | 215 Raises: |
| 216 OSError: Error occurred while pushing. | 216 OSError: Error occurred while pushing. |
| 217 """ | 217 """ |
| 218 num_retries = 5 |
| 218 | 219 |
| 219 # TODO(sosa) - Add logic for buildbot to check whether other slaves have | 220 # TODO(sosa) - Add logic for buildbot to check whether other slaves have |
| 220 # completed and push this change only if they have. | 221 # completed and push this change only if they have. |
| 221 | 222 |
| 222 # Sanity check to make sure we're on a stabilizing branch before pushing. | 223 # Sanity check to make sure we're on a stabilizing branch before pushing. |
| 223 if not _CheckOnStabilizingBranch(): | 224 if not _CheckOnStabilizingBranch(): |
| 224 Info('Not on branch %s so no work found to push. Exiting' % \ | 225 Info('Not on branch %s so no work found to push. Exiting' % \ |
| 225 _STABLE_BRANCH_NAME) | 226 _STABLE_BRANCH_NAME) |
| 226 return | 227 return |
| 227 | 228 |
| 228 description = _SimpleRunCommand('git log --format=format:%s%n%n%b ' + | 229 description = _SimpleRunCommand('git log --format=format:%s%n%n%b ' + |
| 229 gflags.FLAGS.tracking_branch + '..') | 230 gflags.FLAGS.tracking_branch + '..') |
| 230 description = 'Marking set of ebuilds as stable\n\n%s' % description | 231 description = 'Marking set of ebuilds as stable\n\n%s' % description |
| 231 merge_branch_name = 'merge_branch' | 232 merge_branch_name = 'merge_branch' |
| 232 _SimpleRunCommand('git remote update') | 233 for push_try in range(num_retries + 1): |
| 233 merge_branch = _GitBranch(merge_branch_name) | 234 try: |
| 234 merge_branch.CreateBranch() | 235 _SimpleRunCommand('git remote update') |
| 235 if not merge_branch.Exists(): | 236 merge_branch = _GitBranch(merge_branch_name) |
| 236 Die('Unable to create merge branch.') | 237 merge_branch.CreateBranch() |
| 237 _SimpleRunCommand('git merge --squash %s' % _STABLE_BRANCH_NAME) | 238 if not merge_branch.Exists(): |
| 238 _SimpleRunCommand('git commit -m "%s"' % description) | 239 Die('Unable to create merge branch.') |
| 239 # Ugh. There has got to be an easier way to push to a tracking branch | 240 _SimpleRunCommand('git merge --squash %s' % _STABLE_BRANCH_NAME) |
| 240 _SimpleRunCommand('git config push.default tracking') | 241 _SimpleRunCommand('git commit -m "%s"' % description) |
| 241 _SimpleRunCommand('git push') | 242 # Ugh. There has got to be an easier way to push to a tracking branch |
| 243 _SimpleRunCommand('git config push.default tracking') |
| 244 _SimpleRunCommand('git push') |
| 245 break |
| 246 except: |
| 247 if push_try < num_retries: |
| 248 Warning('Failed to push change, performing retry (%s/%s)' % ( |
| 249 push_try + 1, num_retries)) |
| 250 else: |
| 251 raise |
| 242 | 252 |
| 243 | 253 |
| 244 def _SimpleRunCommand(command): | 254 def _SimpleRunCommand(command): |
| 245 """Runs a shell command and returns stdout back to caller.""" | 255 """Runs a shell command and returns stdout back to caller.""" |
| 246 _Print(' + %s' % command) | 256 _Print(' + %s' % command) |
| 247 proc_handle = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) | 257 proc_handle = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) |
| 248 stdout = proc_handle.communicate()[0] | 258 stdout = proc_handle.communicate()[0] |
| 249 retcode = proc_handle.wait() | 259 retcode = proc_handle.wait() |
| 250 if retcode != 0: | 260 if retcode != 0: |
| 251 _Print(stdout) | 261 _Print(stdout) |
| (...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 549 raise | 559 raise |
| 550 | 560 |
| 551 if revved_packages: | 561 if revved_packages: |
| 552 _CleanStalePackages(gflags.FLAGS.board, revved_packages) | 562 _CleanStalePackages(gflags.FLAGS.board, revved_packages) |
| 553 else: | 563 else: |
| 554 work_branch.Delete() | 564 work_branch.Delete() |
| 555 | 565 |
| 556 | 566 |
| 557 if __name__ == '__main__': | 567 if __name__ == '__main__': |
| 558 main(sys.argv) | 568 main(sys.argv) |
| OLD | NEW |