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 automatically roll dependencies in the WebRTC DEPS file.""" | 10 """Script to automatically roll dependencies 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 # Skip these dependencies (list without solution name prefix). | 23 # Skip these dependencies (list without solution name prefix). |
24 DONT_AUTOROLL_THESE = [ | 24 DONT_AUTOROLL_THESE = [ |
25 'src/third_party/gflags/src', | 25 'src/third_party/gflags/src', |
26 'src/third_party/winsdk_samples/src', | 26 'src/third_party/winsdk_samples', |
27 ] | 27 ] |
28 | 28 |
29 WEBRTC_URL = 'https://chromium.googlesource.com/external/webrtc' | 29 WEBRTC_URL = 'https://chromium.googlesource.com/external/webrtc' |
30 CHROMIUM_SRC_URL = 'https://chromium.googlesource.com/chromium/src' | 30 CHROMIUM_SRC_URL = 'https://chromium.googlesource.com/chromium/src' |
31 CHROMIUM_COMMIT_TEMPLATE = CHROMIUM_SRC_URL + '/+/%s' | 31 CHROMIUM_COMMIT_TEMPLATE = CHROMIUM_SRC_URL + '/+/%s' |
32 CHROMIUM_LOG_TEMPLATE = CHROMIUM_SRC_URL + '/+log/%s' | 32 CHROMIUM_LOG_TEMPLATE = CHROMIUM_SRC_URL + '/+log/%s' |
33 CHROMIUM_FILE_TEMPLATE = CHROMIUM_SRC_URL + '/+/%s/%s' | 33 CHROMIUM_FILE_TEMPLATE = CHROMIUM_SRC_URL + '/+/%s/%s' |
34 | 34 |
35 COMMIT_POSITION_RE = re.compile('^Cr-Commit-Position: .*#([0-9]+).*$') | 35 COMMIT_POSITION_RE = re.compile('^Cr-Commit-Position: .*#([0-9]+).*$') |
36 CLANG_REVISION_RE = re.compile(r'^CLANG_REVISION = \'(\d+)\'$') | 36 CLANG_REVISION_RE = re.compile(r'^CLANG_REVISION = \'(\d+)\'$') |
37 ROLL_BRANCH_NAME = 'roll_chromium_revision' | 37 ROLL_BRANCH_NAME = 'roll_chromium_revision' |
38 | 38 |
39 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) | 39 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) |
40 CHECKOUT_SRC_DIR = os.path.realpath(os.path.join(SCRIPT_DIR, os.pardir, | 40 CHECKOUT_SRC_DIR = os.path.realpath(os.path.join(SCRIPT_DIR, os.pardir, |
41 os.pardir)) | 41 os.pardir)) |
42 CHECKOUT_ROOT_DIR = os.path.realpath(os.path.join(CHECKOUT_SRC_DIR, os.pardir)) | 42 CHECKOUT_ROOT_DIR = os.path.realpath(os.path.join(CHECKOUT_SRC_DIR, os.pardir)) |
43 CHROMIUM_CHECKOUT_SRC_DIR = os.path.join(CHECKOUT_SRC_DIR, 'chromium', 'src') | |
44 | 43 |
45 sys.path.append(CHECKOUT_SRC_DIR) | 44 sys.path.append(CHECKOUT_SRC_DIR) |
46 import setup_links | 45 import setup_links |
47 | 46 |
48 sys.path.append(os.path.join(CHECKOUT_SRC_DIR, 'build')) | 47 sys.path.append(os.path.join(CHECKOUT_SRC_DIR, 'build')) |
49 import find_depot_tools | 48 import find_depot_tools |
50 find_depot_tools.add_depot_tools_to_path() | 49 find_depot_tools.add_depot_tools_to_path() |
51 from gclient import GClientKeywords | 50 from gclient import GClientKeywords |
52 | 51 |
53 CLANG_UPDATE_SCRIPT_URL_PATH = 'tools/clang/scripts/update.py' | 52 CLANG_UPDATE_SCRIPT_URL_PATH = 'tools/clang/scripts/update.py' |
54 CLANG_UPDATE_SCRIPT_LOCAL_PATH = os.path.join('tools', 'clang', 'scripts', | 53 CLANG_UPDATE_SCRIPT_LOCAL_PATH = os.path.join(CHECKOUT_SRC_DIR, 'tools', |
55 'update.py') | 54 'clang', 'scripts', 'update.py') |
56 | 55 |
57 DepsEntry = collections.namedtuple('DepsEntry', 'path url revision') | 56 DepsEntry = collections.namedtuple('DepsEntry', 'path url revision') |
58 ChangedDep = collections.namedtuple('ChangedDep', | 57 ChangedDep = collections.namedtuple('ChangedDep', |
59 'path url current_rev new_rev') | 58 'path url current_rev new_rev') |
60 | 59 |
61 class RollError(Exception): | 60 class RollError(Exception): |
62 pass | 61 pass |
63 | 62 |
64 | 63 |
65 def ParseDepsDict(deps_content): | 64 def ParseDepsDict(deps_content): |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 | 289 |
291 | 290 |
292 def CalculateChangedClang(new_cr_rev): | 291 def CalculateChangedClang(new_cr_rev): |
293 def GetClangRev(lines): | 292 def GetClangRev(lines): |
294 for line in lines: | 293 for line in lines: |
295 match = CLANG_REVISION_RE.match(line) | 294 match = CLANG_REVISION_RE.match(line) |
296 if match: | 295 if match: |
297 return match.group(1) | 296 return match.group(1) |
298 raise RollError('Could not parse Clang revision!') | 297 raise RollError('Could not parse Clang revision!') |
299 | 298 |
300 chromium_src_path = os.path.join(CHROMIUM_CHECKOUT_SRC_DIR, | 299 with open(CLANG_UPDATE_SCRIPT_LOCAL_PATH, 'rb') as f: |
301 CLANG_UPDATE_SCRIPT_LOCAL_PATH) | |
302 with open(chromium_src_path, 'rb') as f: | |
303 current_lines = f.readlines() | 300 current_lines = f.readlines() |
304 current_rev = GetClangRev(current_lines) | 301 current_rev = GetClangRev(current_lines) |
305 | 302 |
306 new_clang_update_py = ReadRemoteCrFile(CLANG_UPDATE_SCRIPT_URL_PATH, | 303 new_clang_update_py = ReadRemoteCrFile(CLANG_UPDATE_SCRIPT_URL_PATH, |
307 new_cr_rev).splitlines() | 304 new_cr_rev).splitlines() |
308 new_rev = GetClangRev(new_clang_update_py) | 305 new_rev = GetClangRev(new_clang_update_py) |
309 return ChangedDep(CLANG_UPDATE_SCRIPT_LOCAL_PATH, None, current_rev, new_rev) | 306 return ChangedDep(CLANG_UPDATE_SCRIPT_LOCAL_PATH, None, current_rev, new_rev) |
310 | 307 |
311 | 308 |
312 def GenerateCommitMessage(current_cr_rev, new_cr_rev, current_commit_pos, | 309 def GenerateCommitMessage(current_cr_rev, new_cr_rev, current_commit_pos, |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
359 | 356 |
360 # Update the chromium_revision variable. | 357 # Update the chromium_revision variable. |
361 with open(deps_filename, 'rb') as deps_file: | 358 with open(deps_filename, 'rb') as deps_file: |
362 deps_content = deps_file.read() | 359 deps_content = deps_file.read() |
363 deps_content = deps_content.replace(old_cr_revision, new_cr_revision) | 360 deps_content = deps_content.replace(old_cr_revision, new_cr_revision) |
364 with open(deps_filename, 'wb') as deps_file: | 361 with open(deps_filename, 'wb') as deps_file: |
365 deps_file.write(deps_content) | 362 deps_file.write(deps_content) |
366 | 363 |
367 # Update each individual DEPS entry. | 364 # Update each individual DEPS entry. |
368 for dep in changed_deps: | 365 for dep in changed_deps: |
| 366 local_dep_dir = os.path.join(CHECKOUT_ROOT_DIR, dep.path) |
| 367 if not os.path.isdir(local_dep_dir): |
| 368 raise RollError( |
| 369 'Cannot find local directory %s. Either run\n' |
| 370 'gclient sync --deps=all\n' |
| 371 'or make sure the .gclient file for your solution contains all ' |
| 372 'platforms in the target_os list, i.e.\n' |
| 373 'target_os = ["android", "unix", "mac", "ios", "win"];\n' |
| 374 'Then run "gclient sync" again.' % local_dep_dir) |
369 _, stderr = _RunCommand( | 375 _, stderr = _RunCommand( |
370 ['roll-dep-svn', '--no-verify-revision', dep.path, dep.new_rev], | 376 ['roll-dep-svn', '--no-verify-revision', dep.path, dep.new_rev], |
371 working_dir=CHECKOUT_SRC_DIR, ignore_exit_code=True) | 377 working_dir=CHECKOUT_SRC_DIR, ignore_exit_code=True) |
372 if stderr: | 378 if stderr: |
373 logging.warning('roll-dep-svn: %s', stderr) | 379 logging.warning('roll-dep-svn: %s', stderr) |
374 | 380 |
375 | 381 |
376 def _IsTreeClean(): | 382 def _IsTreeClean(): |
377 stdout, _ = _RunCommand(['git', 'status', '--porcelain']) | 383 stdout, _ = _RunCommand(['git', 'status', '--porcelain']) |
378 if len(stdout) == 0: | 384 if len(stdout) == 0: |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
501 _CreateRollBranch(opts.dry_run) | 507 _CreateRollBranch(opts.dry_run) |
502 UpdateDepsFile(deps_filename, current_cr_rev, new_cr_rev, changed_deps) | 508 UpdateDepsFile(deps_filename, current_cr_rev, new_cr_rev, changed_deps) |
503 _LocalCommit(commit_msg, opts.dry_run) | 509 _LocalCommit(commit_msg, opts.dry_run) |
504 _UploadCL(opts.dry_run, opts.rietveld_email) | 510 _UploadCL(opts.dry_run, opts.rietveld_email) |
505 _SendToCQ(opts.dry_run, opts.skip_cq) | 511 _SendToCQ(opts.dry_run, opts.skip_cq) |
506 return 0 | 512 return 0 |
507 | 513 |
508 | 514 |
509 if __name__ == '__main__': | 515 if __name__ == '__main__': |
510 sys.exit(main()) | 516 sys.exit(main()) |
OLD | NEW |