OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """Utility functions used by the bisect tool. | 5 """Utility functions used by the bisect tool. |
6 | 6 |
7 This includes functions related to checking out the depot and outputting | 7 This includes functions related to checking out the depot and outputting |
8 annotations for the Buildbot waterfall. | 8 annotations for the Buildbot waterfall. |
9 """ | 9 """ |
10 | 10 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 'safesync_url': '', | 59 'safesync_url': '', |
60 }, | 60 }, |
61 ] | 61 ] |
62 GCLIENT_SPEC_ANDROID = "\ntarget_os = ['android']" | 62 GCLIENT_SPEC_ANDROID = "\ntarget_os = ['android']" |
63 GCLIENT_CUSTOM_DEPS_V8 = { | 63 GCLIENT_CUSTOM_DEPS_V8 = { |
64 'src/v8_bleeding_edge': 'https://chromium.googlesource.com/v8/v8.git' | 64 'src/v8_bleeding_edge': 'https://chromium.googlesource.com/v8/v8.git' |
65 } | 65 } |
66 FILE_DEPS_GIT = '.DEPS.git' | 66 FILE_DEPS_GIT = '.DEPS.git' |
67 FILE_DEPS = 'DEPS' | 67 FILE_DEPS = 'DEPS' |
68 | 68 |
69 REPO_SYNC_COMMAND = ('git checkout -f $(git rev-list --max-count=1 ' | |
70 '--before=%d remotes/m/master)') | |
71 | |
72 # Paths to CrOS-related files. | |
73 # WARNING(qyearsley, 2014-08-15): These haven't been tested recently. | |
74 CROS_SDK_PATH = os.path.join('..', 'cros', 'chromite', 'bin', 'cros_sdk') | |
75 CROS_TEST_KEY_PATH = os.path.join( | |
76 '..', 'cros', 'chromite', 'ssh_keys', 'testing_rsa') | |
77 CROS_SCRIPT_KEY_PATH = os.path.join( | |
78 '..', 'cros', 'src', 'scripts', 'mod_for_test_scripts', 'ssh_keys', | |
79 'testing_rsa') | |
80 | |
81 REPO_PARAMS = [ | |
82 'https://chrome-internal.googlesource.com/chromeos/manifest-internal/', | |
83 '--repo-url', | |
84 'https://git.chromium.org/external/repo.git' | |
85 ] | |
86 | |
87 # Bisect working directory. | 69 # Bisect working directory. |
88 BISECT_DIR = 'bisect' | 70 BISECT_DIR = 'bisect' |
89 | 71 |
90 # The percentage at which confidence is considered high. | 72 # The percentage at which confidence is considered high. |
91 HIGH_CONFIDENCE = 95 | 73 HIGH_CONFIDENCE = 95 |
92 | 74 |
93 # Below is the map of "depot" names to information about each depot. Each depot | 75 # Below is the map of "depot" names to information about each depot. Each depot |
94 # is a repository, and in the process of bisecting, revision ranges in these | 76 # is a repository, and in the process of bisecting, revision ranges in these |
95 # repositories may also be bisected. | 77 # repositories may also be bisected. |
96 # | 78 # |
97 # Each depot information dictionary may contain: | 79 # Each depot information dictionary may contain: |
98 # src: Path to the working directory. | 80 # src: Path to the working directory. |
99 # recurse: True if this repository will get bisected. | 81 # recurse: True if this repository will get bisected. |
100 # depends: A list of other repositories that are actually part of the same | 82 # depends: A list of other repositories that are actually part of the same |
101 # repository in svn. If the repository has any dependent repositories | 83 # repository in svn. If the repository has any dependent repositories |
102 # (e.g. skia/src needs skia/include and skia/gyp to be updated), then | 84 # (e.g. skia/src needs skia/include and skia/gyp to be updated), then |
103 # they are specified here. | 85 # they are specified here. |
104 # svn: URL of SVN repository. Needed for git workflow to resolve hashes to | 86 # svn: URL of SVN repository. Needed for git workflow to resolve hashes to |
105 # SVN revisions. | 87 # SVN revisions. |
106 # from: Parent depot that must be bisected before this is bisected. | 88 # from: Parent depot that must be bisected before this is bisected. |
107 # deps_var: Key name in vars variable in DEPS file that has revision | 89 # deps_var: Key name in vars variable in DEPS file that has revision |
108 # information. | 90 # information. |
109 DEPOT_DEPS_NAME = { | 91 DEPOT_DEPS_NAME = { |
110 'chromium': { | 92 'chromium': { |
111 'src': 'src', | 93 'src': 'src', |
112 'recurse': True, | 94 'recurse': True, |
113 'depends': None, | 95 'depends': None, |
114 'from': ['cros', 'android-chrome'], | 96 'from': ['android-chrome'], |
115 'viewvc': | 97 'viewvc': |
116 'http://src.chromium.org/viewvc/chrome?view=revision&revision=', | 98 'http://src.chromium.org/viewvc/chrome?view=revision&revision=', |
117 'deps_var': 'chromium_rev' | 99 'deps_var': 'chromium_rev' |
118 }, | 100 }, |
119 'webkit': { | 101 'webkit': { |
120 'src': 'src/third_party/WebKit', | 102 'src': 'src/third_party/WebKit', |
121 'recurse': True, | 103 'recurse': True, |
122 'depends': None, | 104 'depends': None, |
123 'from': ['chromium'], | 105 'from': ['chromium'], |
124 'viewvc': | 106 'viewvc': |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 params: A list of parameters to pass to gclient. | 293 params: A list of parameters to pass to gclient. |
312 cwd: Working directory to run from. | 294 cwd: Working directory to run from. |
313 | 295 |
314 Returns: | 296 Returns: |
315 The return code of the call. | 297 The return code of the call. |
316 """ | 298 """ |
317 cmd = ['gclient'] + params | 299 cmd = ['gclient'] + params |
318 return _SubprocessCall(cmd, cwd=cwd) | 300 return _SubprocessCall(cmd, cwd=cwd) |
319 | 301 |
320 | 302 |
321 def SetupCrosRepo(): | |
322 """Sets up CrOS repo for bisecting ChromeOS. | |
323 | |
324 Returns: | |
325 True if successful, False otherwise. | |
326 """ | |
327 cwd = os.getcwd() | |
328 try: | |
329 os.mkdir('cros') | |
330 except OSError as e: | |
331 if e.errno != errno.EEXIST: # EEXIST means the directory already exists. | |
332 return False | |
333 os.chdir('cros') | |
334 | |
335 cmd = ['init', '-u'] + REPO_PARAMS | |
336 | |
337 passed = False | |
338 | |
339 if not _RunRepo(cmd): | |
340 if not _RunRepo(['sync']): | |
341 passed = True | |
342 os.chdir(cwd) | |
343 | |
344 return passed | |
345 | |
346 | |
347 def _RunRepo(params): | |
348 """Runs CrOS repo command with specified parameters. | |
349 | |
350 Args: | |
351 params: A list of parameters to pass to gclient. | |
352 | |
353 Returns: | |
354 The return code of the call (zero indicates success). | |
355 """ | |
356 cmd = ['repo'] + params | |
357 return _SubprocessCall(cmd) | |
358 | |
359 | |
360 def RunRepoSyncAtTimestamp(timestamp): | |
361 """Syncs all git depots to the timestamp specified using repo forall. | |
362 | |
363 Args: | |
364 params: Unix timestamp to sync to. | |
365 | |
366 Returns: | |
367 The return code of the call. | |
368 """ | |
369 cmd = ['forall', '-c', REPO_SYNC_COMMAND % timestamp] | |
370 return _RunRepo(cmd) | |
371 | |
372 | |
373 def RunGClientAndCreateConfig(opts, custom_deps=None, cwd=None): | 303 def RunGClientAndCreateConfig(opts, custom_deps=None, cwd=None): |
374 """Runs gclient and creates a config containing both src and src-internal. | 304 """Runs gclient and creates a config containing both src and src-internal. |
375 | 305 |
376 Args: | 306 Args: |
377 opts: The options parsed from the command line through parse_args(). | 307 opts: The options parsed from the command line through parse_args(). |
378 custom_deps: A dictionary of additional dependencies to add to .gclient. | 308 custom_deps: A dictionary of additional dependencies to add to .gclient. |
379 cwd: Working directory to run from. | 309 cwd: Working directory to run from. |
380 | 310 |
381 Returns: | 311 Returns: |
382 The return code of the call. | 312 The return code of the call. |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
622 platform = os.environ.get('PROCESSOR_ARCHITECTURE') | 552 platform = os.environ.get('PROCESSOR_ARCHITECTURE') |
623 return platform and platform in ['AMD64', 'I64'] | 553 return platform and platform in ['AMD64', 'I64'] |
624 | 554 |
625 | 555 |
626 def IsLinuxHost(): | 556 def IsLinuxHost(): |
627 return sys.platform.startswith('linux') | 557 return sys.platform.startswith('linux') |
628 | 558 |
629 | 559 |
630 def IsMacHost(): | 560 def IsMacHost(): |
631 return sys.platform.startswith('darwin') | 561 return sys.platform.startswith('darwin') |
OLD | NEW |