| OLD | NEW |
| 1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2013 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 """Set of operations/utilities related to checking out the depot, and | 5 """Set of operations/utilities related to checking out the depot, and |
| 6 outputting annotations on the buildbot waterfall. These are intended to be | 6 outputting annotations on the buildbot waterfall. These are intended to be |
| 7 used by the bisection scripts.""" | 7 used by the bisection scripts.""" |
| 8 | 8 |
| 9 import errno | 9 import errno |
| 10 import os | 10 import os |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 | 34 |
| 35 REPO_PARAMS = [ | 35 REPO_PARAMS = [ |
| 36 'https://chrome-internal.googlesource.com/chromeos/manifest-internal/', | 36 'https://chrome-internal.googlesource.com/chromeos/manifest-internal/', |
| 37 '--repo-url', | 37 '--repo-url', |
| 38 'https://git.chromium.org/external/repo.git' | 38 'https://git.chromium.org/external/repo.git' |
| 39 ] | 39 ] |
| 40 | 40 |
| 41 REPO_SYNC_COMMAND = 'git checkout -f $(git rev-list --max-count=1 '\ | 41 REPO_SYNC_COMMAND = 'git checkout -f $(git rev-list --max-count=1 '\ |
| 42 '--before=%d remotes/m/master)' | 42 '--before=%d remotes/m/master)' |
| 43 | 43 |
| 44 ORIGINAL_ENV = {} |
| 45 |
| 44 def OutputAnnotationStepStart(name): | 46 def OutputAnnotationStepStart(name): |
| 45 """Outputs appropriate annotation to signal the start of a step to | 47 """Outputs appropriate annotation to signal the start of a step to |
| 46 a trybot. | 48 a trybot. |
| 47 | 49 |
| 48 Args: | 50 Args: |
| 49 name: The name of the step. | 51 name: The name of the step. |
| 50 """ | 52 """ |
| 51 print | 53 print |
| 52 print '@@@SEED_STEP %s@@@' % name | 54 print '@@@SEED_STEP %s@@@' % name |
| 53 print '@@@STEP_CURSOR %s@@@' % name | 55 print '@@@STEP_CURSOR %s@@@' % name |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 passed = False | 278 passed = False |
| 277 | 279 |
| 278 if not RunRepo(cmd): | 280 if not RunRepo(cmd): |
| 279 if not RunRepo(['sync']): | 281 if not RunRepo(['sync']): |
| 280 passed = True | 282 passed = True |
| 281 os.chdir(cwd) | 283 os.chdir(cwd) |
| 282 | 284 |
| 283 return passed | 285 return passed |
| 284 | 286 |
| 285 | 287 |
| 288 def CopyAndSaveOriginalEnvironmentVars(): |
| 289 """Makes a copy of the current environment variables.""" |
| 290 # TODO: Waiting on crbug.com/255689, will remove this after. |
| 291 vars_to_remove = [] |
| 292 for k, v in os.environ.iteritems(): |
| 293 if 'ANDROID' in k: |
| 294 vars_to_remove.append(k) |
| 295 vars_to_remove.append('CHROME_SRC') |
| 296 vars_to_remove.append('CHROMIUM_GYP_FILE') |
| 297 vars_to_remove.append('GOMA_DIR') |
| 298 vars_to_remove.append('GYP_CROSSCOMPILE') |
| 299 vars_to_remove.append('GYP_DEFINES') |
| 300 vars_to_remove.append('GYP_GENERATORS') |
| 301 vars_to_remove.append('GYP_GENERATOR_FLAGS') |
| 302 vars_to_remove.append('OBJCOPY') |
| 303 for k in vars_to_remove: |
| 304 if os.environ.has_key(k): |
| 305 del os.environ[k] |
| 306 |
| 307 global ORIGINAL_ENV |
| 308 ORIGINAL_ENV = os.environ.copy() |
| 309 |
| 310 |
| 286 def SetupAndroidBuildEnvironment(opts): | 311 def SetupAndroidBuildEnvironment(opts): |
| 287 """Sets up the android build environment. | 312 """Sets up the android build environment. |
| 288 | 313 |
| 289 Args: | 314 Args: |
| 290 opts: The options parsed from the command line through parse_args(). | 315 opts: The options parsed from the command line through parse_args(). |
| 291 path_to_file: Path to the bisect script's directory. | 316 path_to_file: Path to the bisect script's directory. |
| 292 | 317 |
| 293 Returns: | 318 Returns: |
| 294 True if successful. | 319 True if successful. |
| 295 """ | 320 """ |
| 321 |
| 322 # Revert the environment variables back to default before setting them up |
| 323 # with envsetup.sh. |
| 324 env_vars = os.environ.copy() |
| 325 for k, _ in env_vars.iteritems(): |
| 326 del os.environ[k] |
| 327 for k, v in ORIGINAL_ENV.iteritems(): |
| 328 os.environ[k] = v |
| 329 |
| 296 path_to_file = os.path.join('build', 'android', 'envsetup.sh') | 330 path_to_file = os.path.join('build', 'android', 'envsetup.sh') |
| 297 proc = subprocess.Popen(['bash', '-c', 'source %s && env' % path_to_file], | 331 proc = subprocess.Popen(['bash', '-c', 'source %s && env' % path_to_file], |
| 298 stdout=subprocess.PIPE, | 332 stdout=subprocess.PIPE, |
| 299 stderr=subprocess.PIPE, | 333 stderr=subprocess.PIPE, |
| 300 cwd='src') | 334 cwd='src') |
| 301 (out, _) = proc.communicate() | 335 (out, _) = proc.communicate() |
| 302 | 336 |
| 303 for line in out.splitlines(): | 337 for line in out.splitlines(): |
| 304 (k, _, v) = line.partition('=') | 338 (k, _, v) = line.partition('=') |
| 305 os.environ[k] = v | 339 os.environ[k] = v |
| 306 return not proc.returncode | 340 return not proc.returncode |
| 307 | 341 |
| 308 | 342 |
| 309 def SetupPlatformBuildEnvironment(opts): | 343 def SetupPlatformBuildEnvironment(opts): |
| 310 """Performs any platform specific setup. | 344 """Performs any platform specific setup. |
| 311 | 345 |
| 312 Args: | 346 Args: |
| 313 opts: The options parsed from the command line through parse_args(). | 347 opts: The options parsed from the command line through parse_args(). |
| 314 path_to_file: Path to the bisect script's directory. | 348 path_to_file: Path to the bisect script's directory. |
| 315 | 349 |
| 316 Returns: | 350 Returns: |
| 317 True if successful. | 351 True if successful. |
| 318 """ | 352 """ |
| 319 if opts.target_platform == 'android': | 353 if opts.target_platform == 'android': |
| 354 CopyAndSaveOriginalEnvironmentVars() |
| 320 return SetupAndroidBuildEnvironment(opts) | 355 return SetupAndroidBuildEnvironment(opts) |
| 321 elif opts.target_platform == 'cros': | 356 elif opts.target_platform == 'cros': |
| 322 return SetupCrosRepo() | 357 return SetupCrosRepo() |
| 323 | 358 |
| 324 return True | 359 return True |
| 325 | 360 |
| 326 | 361 |
| 327 def CreateBisectDirectoryAndSetupDepot(opts, reset=False): | 362 def CreateBisectDirectoryAndSetupDepot(opts, reset=False): |
| 328 """Sets up a subdirectory 'bisect' and then retrieves a copy of the depot | 363 """Sets up a subdirectory 'bisect' and then retrieves a copy of the depot |
| 329 there using gclient. | 364 there using gclient. |
| 330 | 365 |
| 331 Args: | 366 Args: |
| 332 opts: The options parsed from the command line through parse_args(). | 367 opts: The options parsed from the command line through parse_args(). |
| 333 reset: Whether to reset any changes to the depot. | 368 reset: Whether to reset any changes to the depot. |
| 334 | 369 |
| 335 Returns: | 370 Returns: |
| 336 Returns 0 on success, otherwise 1. | 371 Returns 0 on success, otherwise 1. |
| 337 """ | 372 """ |
| 338 if not CreateAndChangeToSourceDirectory(opts.working_directory): | 373 if not CreateAndChangeToSourceDirectory(opts.working_directory): |
| 339 print 'Error: Could not create bisect directory.' | 374 print 'Error: Could not create bisect directory.' |
| 340 print | 375 print |
| 341 return 1 | 376 return 1 |
| 342 | 377 |
| 343 if not SetupGitDepot(opts, reset): | 378 if not SetupGitDepot(opts, reset): |
| 344 print 'Error: Failed to grab source.' | 379 print 'Error: Failed to grab source.' |
| 345 print | 380 print |
| 346 return 1 | 381 return 1 |
| 347 | 382 |
| 348 return 0 | 383 return 0 |
| OLD | NEW |