| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 # Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. |
| 3 # | 3 # |
| 4 # Use of this source code is governed by a BSD-style license | 4 # Use of this source code is governed by a BSD-style license |
| 5 # that can be found in the LICENSE file in the root of the source | 5 # that can be found in the LICENSE file in the root of the source |
| 6 # tree. An additional intellectual property rights grant can be found | 6 # tree. An additional intellectual property rights grant can be found |
| 7 # in the file PATENTS. All contributing project authors may | 7 # in the file PATENTS. All contributing project authors may |
| 8 # be found in the AUTHORS file in the root of the source tree. | 8 # be found in the AUTHORS file in the root of the source tree. |
| 9 | 9 |
| 10 """Script to roll chromium_revision in the WebRTC DEPS file.""" | 10 """Script to roll chromium_revision in the WebRTC DEPS file.""" |
| 11 | 11 |
| 12 import argparse | 12 import argparse |
| 13 import base64 | 13 import base64 |
| 14 import collections | 14 import collections |
| 15 import logging | 15 import logging |
| 16 import os | 16 import os |
| 17 import re | 17 import re |
| 18 import subprocess | 18 import subprocess |
| 19 import sys | 19 import sys |
| 20 import urllib | 20 import urllib |
| 21 | 21 |
| 22 | 22 |
| 23 CHROMIUM_SRC_URL = 'https://chromium.googlesource.com/chromium/src' | 23 CHROMIUM_SRC_URL = 'https://chromium.googlesource.com/chromium/src' |
| 24 CHROMIUM_COMMIT_TEMPLATE = CHROMIUM_SRC_URL + '/+/%s' | 24 CHROMIUM_COMMIT_TEMPLATE = CHROMIUM_SRC_URL + '/+/%s' |
| 25 CHROMIUM_LOG_TEMPLATE = CHROMIUM_SRC_URL + '/+log/%s' | 25 CHROMIUM_LOG_TEMPLATE = CHROMIUM_SRC_URL + '/+log/%s' |
| 26 CHROMIUM_FILE_TEMPLATE = CHROMIUM_SRC_URL + '/+/%s/%s' | 26 CHROMIUM_FILE_TEMPLATE = CHROMIUM_SRC_URL + '/+/%s/%s' |
| 27 | 27 |
| 28 # Run these CQ trybots in addition to the default ones in infra/config/cq.cfg. |
| 29 EXTRA_TRYBOTS = 'tryserver.webrtc:win_baremetal,mac_baremetal,linux_baremetal' |
| 30 |
| 28 COMMIT_POSITION_RE = re.compile('^Cr-Commit-Position: .*#([0-9]+).*$') | 31 COMMIT_POSITION_RE = re.compile('^Cr-Commit-Position: .*#([0-9]+).*$') |
| 29 CLANG_REVISION_RE = re.compile(r'^CLANG_REVISION=(\d+)$') | 32 CLANG_REVISION_RE = re.compile(r'^CLANG_REVISION=(\d+)$') |
| 30 ROLL_BRANCH_NAME = 'roll_chromium_revision' | 33 ROLL_BRANCH_NAME = 'roll_chromium_revision' |
| 31 | 34 |
| 32 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) | 35 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) |
| 33 CHECKOUT_ROOT_DIR = os.path.realpath(os.path.join(SCRIPT_DIR, os.pardir, | 36 CHECKOUT_ROOT_DIR = os.path.realpath(os.path.join(SCRIPT_DIR, os.pardir, |
| 34 os.pardir)) | 37 os.pardir)) |
| 35 sys.path.append(CHECKOUT_ROOT_DIR) | 38 sys.path.append(CHECKOUT_ROOT_DIR) |
| 36 import setup_links | 39 import setup_links |
| 37 | 40 |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 current_cr_rev = current_cr_rev[0:7] | 256 current_cr_rev = current_cr_rev[0:7] |
| 254 new_cr_rev = new_cr_rev[0:7] | 257 new_cr_rev = new_cr_rev[0:7] |
| 255 rev_interval = '%s..%s' % (current_cr_rev, new_cr_rev) | 258 rev_interval = '%s..%s' % (current_cr_rev, new_cr_rev) |
| 256 git_number_interval = '%s:%s' % (current_commit_pos, new_commit_pos) | 259 git_number_interval = '%s:%s' % (current_commit_pos, new_commit_pos) |
| 257 | 260 |
| 258 commit_msg = ['Roll chromium_revision %s (%s)\n' % (rev_interval, | 261 commit_msg = ['Roll chromium_revision %s (%s)\n' % (rev_interval, |
| 259 git_number_interval)] | 262 git_number_interval)] |
| 260 commit_msg.append('Change log: %s' % (CHROMIUM_LOG_TEMPLATE % rev_interval)) | 263 commit_msg.append('Change log: %s' % (CHROMIUM_LOG_TEMPLATE % rev_interval)) |
| 261 commit_msg.append('Full diff: %s\n' % (CHROMIUM_COMMIT_TEMPLATE % | 264 commit_msg.append('Full diff: %s\n' % (CHROMIUM_COMMIT_TEMPLATE % |
| 262 rev_interval)) | 265 rev_interval)) |
| 263 | |
| 264 # TBR field will be empty unless in some custom cases, where some engineers | 266 # TBR field will be empty unless in some custom cases, where some engineers |
| 265 # are added. | 267 # are added. |
| 266 tbr_authors = '' | 268 tbr_authors = '' |
| 267 | |
| 268 if changed_deps_list: | 269 if changed_deps_list: |
| 269 commit_msg.append('Changed dependencies:') | 270 commit_msg.append('Changed dependencies:') |
| 270 | 271 |
| 271 for c in changed_deps_list: | 272 for c in changed_deps_list: |
| 272 commit_msg.append('* %s: %s/+log/%s..%s' % (c.path, c.url, | 273 commit_msg.append('* %s: %s/+log/%s..%s' % (c.path, c.url, |
| 273 c.current_rev[0:7], | 274 c.current_rev[0:7], |
| 274 c.new_rev[0:7])) | 275 c.new_rev[0:7])) |
| 275 if 'libvpx' in c.path: | 276 if 'libvpx' in c.path: |
| 276 tbr_authors += 'marpan@webrtc.org, stefan@webrtc.org, ' | 277 tbr_authors += 'marpan@webrtc.org, stefan@webrtc.org, ' |
| 277 | 278 |
| 278 change_url = CHROMIUM_FILE_TEMPLATE % (rev_interval, 'DEPS') | 279 change_url = CHROMIUM_FILE_TEMPLATE % (rev_interval, 'DEPS') |
| 279 commit_msg.append('DEPS diff: %s\n' % change_url) | 280 commit_msg.append('DEPS diff: %s\n' % change_url) |
| 280 else: | 281 else: |
| 281 commit_msg.append('No dependencies changed.') | 282 commit_msg.append('No dependencies changed.') |
| 282 | 283 |
| 283 if clang_change.current_rev != clang_change.new_rev: | 284 if clang_change.current_rev != clang_change.new_rev: |
| 284 commit_msg.append('Clang version changed %s:%s' % | 285 commit_msg.append('Clang version changed %s:%s' % |
| 285 (clang_change.current_rev, clang_change.new_rev)) | 286 (clang_change.current_rev, clang_change.new_rev)) |
| 286 change_url = CHROMIUM_FILE_TEMPLATE % (rev_interval, | 287 change_url = CHROMIUM_FILE_TEMPLATE % (rev_interval, |
| 287 CLANG_UPDATE_SCRIPT_URL_PATH) | 288 CLANG_UPDATE_SCRIPT_URL_PATH) |
| 288 commit_msg.append('Details: %s' % change_url) | 289 commit_msg.append('Details: %s\n' % change_url) |
| 289 tbr_authors += 'pbos@webrtc.org' | 290 tbr_authors += 'pbos@webrtc.org' |
| 290 else: | 291 else: |
| 291 commit_msg.append('No update to Clang.') | 292 commit_msg.append('No update to Clang.\n') |
| 292 | 293 |
| 293 commit_msg.append('\nTBR=%s\n' % tbr_authors) | 294 commit_msg.append('TBR=%s' % tbr_authors) |
| 295 commit_msg.append('CQ_EXTRA_TRYBOTS=%s' % EXTRA_TRYBOTS) |
| 294 return '\n'.join(commit_msg) | 296 return '\n'.join(commit_msg) |
| 295 | 297 |
| 296 | 298 |
| 297 def UpdateDeps(deps_filename, old_cr_revision, new_cr_revision): | 299 def UpdateDeps(deps_filename, old_cr_revision, new_cr_revision): |
| 298 """Update the DEPS file with the new revision.""" | 300 """Update the DEPS file with the new revision.""" |
| 299 with open(deps_filename, 'rb') as deps_file: | 301 with open(deps_filename, 'rb') as deps_file: |
| 300 deps_content = deps_file.read() | 302 deps_content = deps_file.read() |
| 301 deps_content = deps_content.replace(old_cr_revision, new_cr_revision) | 303 deps_content = deps_content.replace(old_cr_revision, new_cr_revision) |
| 302 with open(deps_filename, 'wb') as deps_file: | 304 with open(deps_filename, 'wb') as deps_file: |
| 303 deps_file.write(deps_content) | 305 deps_file.write(deps_content) |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 if not dry_run: | 354 if not dry_run: |
| 353 _RunCommand(['git', 'cl', 'upload'], extra_env={'EDITOR': 'true'}) | 355 _RunCommand(['git', 'cl', 'upload'], extra_env={'EDITOR': 'true'}) |
| 354 | 356 |
| 355 | 357 |
| 356 def _LaunchTrybots(dry_run, skip_try): | 358 def _LaunchTrybots(dry_run, skip_try): |
| 357 logging.info('Sending tryjobs...') | 359 logging.info('Sending tryjobs...') |
| 358 if not dry_run and not skip_try: | 360 if not dry_run and not skip_try: |
| 359 _RunCommand(['git', 'cl', 'try']) | 361 _RunCommand(['git', 'cl', 'try']) |
| 360 | 362 |
| 361 | 363 |
| 364 def _SendToCQ(dry_run, skip_cq): |
| 365 logging.info('Sending the CL to the CQ...') |
| 366 if not dry_run and not skip_cq: |
| 367 _RunCommand(['git', 'cl', 'set_commit']) |
| 368 logging.info('Sent the CL to the CQ.') |
| 369 |
| 370 |
| 362 def main(): | 371 def main(): |
| 363 p = argparse.ArgumentParser() | 372 p = argparse.ArgumentParser() |
| 364 p.add_argument('--clean', action='store_true', default=False, | 373 p.add_argument('--clean', action='store_true', default=False, |
| 365 help='Removes any previous local roll branch.') | 374 help='Removes any previous local roll branch.') |
| 366 p.add_argument('-r', '--revision', | 375 p.add_argument('-r', '--revision', |
| 367 help=('Chromium Git revision to roll to. Defaults to the ' | 376 help=('Chromium Git revision to roll to. Defaults to the ' |
| 368 'Chromium HEAD revision if omitted.')) | 377 'Chromium HEAD revision if omitted.')) |
| 369 p.add_argument('--dry-run', action='store_true', default=False, | 378 p.add_argument('--dry-run', action='store_true', default=False, |
| 370 help=('Calculate changes and modify DEPS, but don\'t create ' | 379 help=('Calculate changes and modify DEPS, but don\'t create ' |
| 371 'any local branch, commit, upload CL or send any ' | 380 'any local branch, commit, upload CL or send any ' |
| 372 'tryjobs.')) | 381 'tryjobs.')) |
| 373 p.add_argument('--allow-reverse', action='store_true', default=False, | 382 p.add_argument('--allow-reverse', action='store_true', default=False, |
| 374 help=('Allow rolling back in time (disabled by default but ' | 383 help=('Allow rolling back in time (disabled by default but ' |
| 375 'may be useful to be able do to manually).')) | 384 'may be useful to be able do to manually).')) |
| 376 p.add_argument('-s', '--skip-try', action='store_true', default=False, | 385 p.add_argument('-s', '--skip-try', action='store_true', default=False, |
| 377 help='Do everything except sending tryjobs.') | 386 help='Skip sending tryjobs (default: %(default)s)') |
| 387 p.add_argument('--skip-cq', action='store_true', default=False, |
| 388 help='Skip sending the CL to the CQ (default: %(default)s)') |
| 378 p.add_argument('-v', '--verbose', action='store_true', default=False, | 389 p.add_argument('-v', '--verbose', action='store_true', default=False, |
| 379 help='Be extra verbose in printing of log messages.') | 390 help='Be extra verbose in printing of log messages.') |
| 380 opts = p.parse_args() | 391 opts = p.parse_args() |
| 381 | 392 |
| 382 if opts.verbose: | 393 if opts.verbose: |
| 383 logging.basicConfig(level=logging.DEBUG) | 394 logging.basicConfig(level=logging.DEBUG) |
| 384 else: | 395 else: |
| 385 logging.basicConfig(level=logging.INFO) | 396 logging.basicConfig(level=logging.INFO) |
| 386 | 397 |
| 387 if not _IsTreeClean(): | 398 if not _IsTreeClean(): |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 '--allow-reverse flag.\n' | 434 '--allow-reverse flag.\n' |
| 424 'Aborting without action.', current_cr_rev, current_commit_pos, | 435 'Aborting without action.', current_cr_rev, current_commit_pos, |
| 425 new_cr_rev, new_commit_pos) | 436 new_cr_rev, new_commit_pos) |
| 426 return 0 | 437 return 0 |
| 427 | 438 |
| 428 _CreateRollBranch(opts.dry_run) | 439 _CreateRollBranch(opts.dry_run) |
| 429 UpdateDeps(deps_filename, current_cr_rev, new_cr_rev) | 440 UpdateDeps(deps_filename, current_cr_rev, new_cr_rev) |
| 430 _LocalCommit(commit_msg, opts.dry_run) | 441 _LocalCommit(commit_msg, opts.dry_run) |
| 431 _UploadCL(opts.dry_run) | 442 _UploadCL(opts.dry_run) |
| 432 _LaunchTrybots(opts.dry_run, opts.skip_try) | 443 _LaunchTrybots(opts.dry_run, opts.skip_try) |
| 444 _SendToCQ(opts.dry_run, opts.skip_cq) |
| 433 return 0 | 445 return 0 |
| 434 | 446 |
| 435 | 447 |
| 436 if __name__ == '__main__': | 448 if __name__ == '__main__': |
| 437 sys.exit(main()) | 449 sys.exit(main()) |
| OLD | NEW |