Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(303)

Side by Side Diff: master/skia_master_scripts/utils.py

Issue 14475006: Change Builder Names, MkII (Closed) Base URL: http://skia.googlecode.com/svn/buildbot/
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 5
6 """Miscellaneous utilities needed by the Skia buildbot master.""" 6 """Miscellaneous utilities needed by the Skia buildbot master."""
7 7
8 8
9 import httplib2 9 import httplib2
10 import re 10 import re
(...skipping 16 matching lines...) Expand all
27 from skia_master_scripts import chromeos_factory 27 from skia_master_scripts import chromeos_factory
28 from skia_master_scripts import factory as skia_factory 28 from skia_master_scripts import factory as skia_factory
29 from skia_master_scripts import housekeeping_percommit_factory, \ 29 from skia_master_scripts import housekeeping_percommit_factory, \
30 housekeeping_periodic_factory 30 housekeeping_periodic_factory
31 from skia_master_scripts import ios_factory 31 from skia_master_scripts import ios_factory
32 from skia_master_scripts import nacl_factory 32 from skia_master_scripts import nacl_factory
33 33
34 import config_private 34 import config_private
35 35
36 36
37 CATEGORY_BUILD = ' Build' 37 BUILDER_NAME_SEP = '-'
38 TRYBOT_NAME_SUFFIX = '_Trybot' 38
39 # Patterns for creating builder names, based on the role of the builder.
40 # TODO(borenet): Extract these into a separate file (JSON?) so that they can be
41 # read by other users.
42 BUILDER_ROLE_COMPILE = 'Build'
43 BUILDER_ROLE_PERF = 'Perf'
44 BUILDER_ROLE_TEST = 'Test'
45 BUILDER_ROLE_HOUSEKEEPER = 'Housekeeper'
epoger 2013/04/24 18:56:10 ideas for shorter name: House, Tasks, Other
46 BUILDER_NAME_DEFAULT_ATTRS = ['os', 'model', 'gpu', 'configuration',
47 'arch_width']
48 BUILDER_NAME_SCHEMA = {
49 BUILDER_ROLE_COMPILE: ['os', 'compiler', 'configuration', 'target_arch'],
50 BUILDER_ROLE_TEST: BUILDER_NAME_DEFAULT_ATTRS,
51 BUILDER_ROLE_PERF: BUILDER_NAME_DEFAULT_ATTRS,
52 BUILDER_ROLE_HOUSEKEEPER: ['frequency'],
53 }
54
55 TRYBOT_NAME_SUFFIX = 'Trybot'
39 TRY_SCHEDULER_SVN = 'skia_try_svn' 56 TRY_SCHEDULER_SVN = 'skia_try_svn'
40 TRY_SCHEDULER_RIETVELD = 'skia_try_rietveld' 57 TRY_SCHEDULER_RIETVELD = 'skia_try_rietveld'
41 TRY_SCHEDULERS = [TRY_SCHEDULER_SVN, TRY_SCHEDULER_RIETVELD] 58 TRY_SCHEDULERS = [TRY_SCHEDULER_SVN, TRY_SCHEDULER_RIETVELD]
42 TRY_SCHEDULERS_STR = '|'.join(TRY_SCHEDULERS) 59 TRY_SCHEDULERS_STR = '|'.join(TRY_SCHEDULERS)
43 60
44 61
45 def IsTrybot(builder_name): 62 def IsTrybot(builder_name):
46 return builder_name.endswith(TRYBOT_NAME_SUFFIX) 63 return builder_name.endswith(TRYBOT_NAME_SUFFIX)
47 64
48 65
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 # Specifically, the Helper class hardcodes each registered scheduler to be 225 # Specifically, the Helper class hardcodes each registered scheduler to be
209 # instantiated as a 'Scheduler,' which aliases 'SingleBranchScheduler.' We add 226 # instantiated as a 'Scheduler,' which aliases 'SingleBranchScheduler.' We add
210 # an 'AnyBranchScheduler' method and change the implementation of Update() to 227 # an 'AnyBranchScheduler' method and change the implementation of Update() to
211 # instantiate the proper type. 228 # instantiate the proper type.
212 229
213 # TODO(borenet): modify this code upstream so that we don't need this override. 230 # TODO(borenet): modify this code upstream so that we don't need this override.
214 # BUG: http://code.google.com/p/skia/issues/detail?id=761 231 # BUG: http://code.google.com/p/skia/issues/detail?id=761
215 class SkiaHelper(master_config.Helper): 232 class SkiaHelper(master_config.Helper):
216 233
217 def Builder(self, name, factory, gatekeeper=None, scheduler=None, 234 def Builder(self, name, factory, gatekeeper=None, scheduler=None,
218 builddir=None, auto_reboot=False, notify_on_missing=False, 235 builddir=None, auto_reboot=False, notify_on_missing=False):
219 override_category=None):
220 if override_category:
221 old_category = self._defaults.get('category')
222 self._defaults['category'] = override_category
223 super(SkiaHelper, self).Builder(name=name, factory=factory, 236 super(SkiaHelper, self).Builder(name=name, factory=factory,
224 gatekeeper=gatekeeper, scheduler=scheduler, 237 gatekeeper=gatekeeper, scheduler=scheduler,
225 builddir=builddir, auto_reboot=auto_reboot, 238 builddir=builddir, auto_reboot=auto_reboot,
226 notify_on_missing=notify_on_missing) 239 notify_on_missing=notify_on_missing)
227 if override_category:
228 self._defaults['category'] = old_category
229 240
230 def AnyBranchScheduler(self, name, branches, treeStableTimer=60, 241 def AnyBranchScheduler(self, name, branches, treeStableTimer=60,
231 categories=None): 242 categories=None):
232 if name in self._schedulers: 243 if name in self._schedulers:
233 raise ValueError('Scheduler %s already exist' % name) 244 raise ValueError('Scheduler %s already exist' % name)
234 self._schedulers[name] = {'type': 'AnyBranchScheduler', 245 self._schedulers[name] = {'type': 'AnyBranchScheduler',
235 'branches': branches, 246 'branches': branches,
236 'treeStableTimer': treeStableTimer, 247 'treeStableTimer': treeStableTimer,
237 'builders': [], 248 'builders': [],
238 'categories': categories} 249 'categories': categories}
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 # been defined. 371 # been defined.
361 # pylint: disable=W0601 372 # pylint: disable=W0601
362 global skia_all_subdirs 373 global skia_all_subdirs
363 try: 374 try:
364 if skia_all_subdirs: 375 if skia_all_subdirs:
365 raise Exception('skia_all_subdirs has already been defined!') 376 raise Exception('skia_all_subdirs has already been defined!')
366 except NameError: 377 except NameError:
367 skia_all_subdirs = all_subdirs 378 skia_all_subdirs = all_subdirs
368 379
369 380
370 def MakeBuilderName(builder_base_name, config): 381 def MakeBuilderName(role, extra_config=None, is_trybot=False, **kwargs):
371 """ Inserts config into builder_base_name at '%s', or if builder_base_name 382 schema = BUILDER_NAME_SCHEMA.get(role)
epoger 2013/04/24 18:56:10 I like how you did this! The Python force is stro
372 does not contain '%s', appends config to the end of builder_base_name, 383 if not schema:
373 separated by an underscore. """ 384 raise ValueError('%s is not a recognized role.' % role)
374 try: 385 for k, v in kwargs.iteritems():
375 return builder_base_name % config 386 if BUILDER_NAME_SEP in v:
376 except TypeError: 387 raise ValueError('%s not allowed in %s.' % (v, BUILDER_NAME_SEP))
377 # If builder_base_name does not contain '%s' 388 if not k in schema:
378 return '%s_%s' % (builder_base_name, config) 389 raise ValueError('Schema does not contain "%s": %s' %(k, schema))
390 if extra_config and BUILDER_NAME_SEP in extra_config:
391 raise ValueError('%s not allowed in %s.' % (extra_config,
392 BUILDER_NAME_SEP))
393 name_parts = [role]
394 name_parts.extend([kwargs[attribute] for attribute in schema])
395 if extra_config:
396 name_parts.append(extra_config)
397 if is_trybot:
398 name_parts.append(TRYBOT_NAME_SUFFIX)
399 return BUILDER_NAME_SEP.join(name_parts)
379 400
380 401
381 def MakeCompileBuilderName(builder_base_name, release=False): 402 def _MakeBuilderSet(helper, os, model, gpu, arch_width, gm_image_subdir,
382 if release: 403 extra_config=None, perf_output_basedir=None,
383 compile_name = 'Compile_Release' 404 extra_branches=None, factory_type=None, do_debug=True,
384 else: 405 do_release=True, do_bench=True, is_trybot=False, **kwargs):
385 compile_name = 'Compile_Debug' 406 """ Creates a set of builders for a given platform:
386 return MakeBuilderName(builder_base_name, compile_name)
387
388
389 def MakeDebugBuilderName(builder_base_name):
390 return MakeBuilderName(builder_base_name, skia_factory.CONFIG_DEBUG)
391
392
393 def MakeReleaseBuilderName(builder_base_name):
394 return MakeBuilderName(builder_base_name, skia_factory.CONFIG_RELEASE)
395
396
397 def MakeBenchBuilderName(builder_base_name):
398 return MakeBuilderName(builder_base_name, skia_factory.CONFIG_BENCH)
399
400
401 def MakeSchedulerName(builder_base_name):
402 return MakeBuilderName(builder_base_name, 'Scheduler')
403
404
405 def _MakeBuilderSet(helper, builder_base_name, gm_image_subdir,
406 perf_output_basedir=None, extra_branches=None,
407 factory_type=None, do_compile=True, do_debug=True,
408 do_release=True, do_bench=True, try_schedulers=None,
409 compile_bot_warnings_as_errors=True,
410 **kwargs):
411 """ Creates a trio of builders for a given platform:
412 1. Debug mode builder which runs all steps 407 1. Debug mode builder which runs all steps
413 2. Release mode builder which runs all steps EXCEPT benchmarks 408 2. Release mode builder which runs all steps EXCEPT benchmarks
414 3. Release mode builder which runs ONLY benchmarks. 409 3. Release mode builder which runs ONLY benchmarks.
415 """ 410 """
416 B = helper.Builder 411 B = helper.Builder
417 F = helper.Factory 412 F = helper.Factory
418 413
419 if not extra_branches: 414 if not extra_branches:
420 extra_branches = [] 415 extra_branches = []
421 subdirs_to_checkout = set(extra_branches) 416 subdirs_to_checkout = set(extra_branches)
422 if gm_image_subdir: 417 if gm_image_subdir:
423 gm_image_branch = 'gm-expected/%s' % gm_image_subdir 418 gm_image_branch = 'gm-expected/%s' % gm_image_subdir
424 subdirs_to_checkout.add(gm_image_branch) 419 subdirs_to_checkout.add(gm_image_branch)
425 420
426 if try_schedulers: 421 if is_trybot:
427 scheduler_name = '|'.join(try_schedulers) 422 scheduler_name = TRY_SCHEDULERS_STR
428 builder_base_name = builder_base_name + TRYBOT_NAME_SUFFIX
429 else: 423 else:
430 scheduler_name = MakeSchedulerName(builder_base_name) 424 scheduler_name = MakeBuilderName(role=BUILDER_ROLE_TEST,
425 os=os,
426 model=model,
427 gpu=gpu,
428 arch_width=arch_width,
429 configuration='Scheduler',
430 extra_config=extra_config,
431 is_trybot=False)
431 branches = list(subdirs_to_checkout.union(SKIA_PRIMARY_SUBDIRS)) 432 branches = list(subdirs_to_checkout.union(SKIA_PRIMARY_SUBDIRS))
432 helper.AnyBranchScheduler(scheduler_name, branches=branches) 433 helper.AnyBranchScheduler(scheduler_name, branches=branches)
433 434
434 if do_compile: 435 if do_debug:
435 compile_debug_builder_name = MakeCompileBuilderName(builder_base_name, 436 debug_builder_name = MakeBuilderName(
436 release=False) 437 role=BUILDER_ROLE_TEST,
437 B(compile_debug_builder_name, 'f_%s' % compile_debug_builder_name, 438 os=os,
438 # Do not add gatekeeper for trybots. 439 model=model,
439 gatekeeper='GateKeeper' if try_schedulers is None else None, 440 gpu=gpu,
440 scheduler=scheduler_name, override_category=CATEGORY_BUILD)
441 F('f_%s' % compile_debug_builder_name, factory_type(
442 builder_name=compile_debug_builder_name,
443 other_subdirs=subdirs_to_checkout,
444 configuration=skia_factory.CONFIG_DEBUG, 441 configuration=skia_factory.CONFIG_DEBUG,
445 gm_image_subdir=gm_image_subdir, 442 arch_width=arch_width,
446 do_patch_step=(try_schedulers is not None), 443 extra_config=extra_config,
447 perf_output_basedir=None, 444 is_trybot=is_trybot)
448 compile_warnings_as_errors=compile_bot_warnings_as_errors,
449 **kwargs
450 ).BuildCompileOnly())
451 compile_release_builder_name = MakeCompileBuilderName(builder_base_name,
452 release=True)
453 B(compile_release_builder_name, 'f_%s' % compile_release_builder_name,
454 # Do not add gatekeeper for trybots.
455 gatekeeper='GateKeeper' if try_schedulers is None else None,
456 scheduler=scheduler_name, override_category=CATEGORY_BUILD)
457 F('f_%s' % compile_release_builder_name, factory_type(
458 builder_name=compile_release_builder_name,
459 other_subdirs=subdirs_to_checkout,
460 configuration=skia_factory.CONFIG_RELEASE,
461 gm_image_subdir=gm_image_subdir,
462 do_patch_step=(try_schedulers is not None),
463 perf_output_basedir=None,
464 compile_warnings_as_errors=compile_bot_warnings_as_errors,
465 **kwargs
466 ).BuildCompileOnly())
467
468 if do_debug:
469 debug_builder_name = MakeDebugBuilderName(builder_base_name)
470 B(debug_builder_name, 'f_%s' % debug_builder_name, 445 B(debug_builder_name, 'f_%s' % debug_builder_name,
471 scheduler=scheduler_name) 446 scheduler=scheduler_name)
472 F('f_%s' % debug_builder_name, factory_type( 447 F('f_%s' % debug_builder_name, factory_type(
473 builder_name=debug_builder_name, 448 builder_name=debug_builder_name,
474 other_subdirs=subdirs_to_checkout, 449 other_subdirs=subdirs_to_checkout,
475 configuration=skia_factory.CONFIG_DEBUG, 450 configuration=skia_factory.CONFIG_DEBUG,
476 gm_image_subdir=gm_image_subdir, 451 gm_image_subdir=gm_image_subdir,
477 do_patch_step=(try_schedulers is not None), 452 do_patch_step=is_trybot,
478 perf_output_basedir=None, 453 perf_output_basedir=None,
479 compile_warnings_as_errors=False, 454 compile_warnings_as_errors=False,
480 **kwargs 455 **kwargs
481 ).Build()) 456 ).Build())
482 457
483 if do_release: 458 if do_release:
484 no_perf_builder_name = MakeReleaseBuilderName(builder_base_name) 459 no_perf_builder_name = MakeBuilderName(
460 role=BUILDER_ROLE_TEST,
461 os=os,
462 model=model,
463 gpu=gpu,
464 configuration=skia_factory.CONFIG_RELEASE,
465 arch_width=arch_width,
466 extra_config=extra_config,
467 is_trybot=is_trybot)
485 B(no_perf_builder_name, 'f_%s' % no_perf_builder_name, 468 B(no_perf_builder_name, 'f_%s' % no_perf_builder_name,
486 scheduler=scheduler_name) 469 scheduler=scheduler_name)
487 F('f_%s' % no_perf_builder_name, factory_type( 470 F('f_%s' % no_perf_builder_name, factory_type(
488 builder_name=no_perf_builder_name, 471 builder_name=no_perf_builder_name,
489 other_subdirs=subdirs_to_checkout, 472 other_subdirs=subdirs_to_checkout,
490 configuration=skia_factory.CONFIG_RELEASE, 473 configuration=skia_factory.CONFIG_RELEASE,
491 gm_image_subdir=gm_image_subdir, 474 gm_image_subdir=gm_image_subdir,
492 do_patch_step=(try_schedulers is not None), 475 do_patch_step=is_trybot,
493 perf_output_basedir=None, 476 perf_output_basedir=None,
494 compile_warnings_as_errors=False, 477 compile_warnings_as_errors=False,
495 **kwargs 478 **kwargs
496 ).BuildNoPerf()) 479 ).BuildNoPerf())
497 480
498 if do_bench: 481 if do_bench:
499 perf_builder_name = MakeBenchBuilderName(builder_base_name) 482 perf_builder_name = MakeBuilderName(
483 role=BUILDER_ROLE_PERF,
484 os=os,
485 model=model,
486 gpu=gpu,
487 configuration=skia_factory.CONFIG_RELEASE,
488 arch_width=arch_width,
489 extra_config=extra_config,
490 is_trybot=is_trybot)
500 B(perf_builder_name, 'f_%s' % perf_builder_name, 491 B(perf_builder_name, 'f_%s' % perf_builder_name,
501 scheduler=scheduler_name) 492 scheduler=scheduler_name)
502 F('f_%s' % perf_builder_name, factory_type( 493 F('f_%s' % perf_builder_name, factory_type(
503 builder_name=perf_builder_name, 494 builder_name=perf_builder_name,
504 other_subdirs=subdirs_to_checkout, 495 other_subdirs=subdirs_to_checkout,
505 configuration=skia_factory.CONFIG_RELEASE, 496 configuration=skia_factory.CONFIG_RELEASE,
506 gm_image_subdir=gm_image_subdir, 497 gm_image_subdir=gm_image_subdir,
507 do_patch_step=(try_schedulers is not None), 498 do_patch_step=is_trybot,
508 perf_output_basedir=perf_output_basedir, 499 perf_output_basedir=perf_output_basedir,
509 compile_warnings_as_errors=False, 500 compile_warnings_as_errors=False,
510 **kwargs 501 **kwargs
511 ).BuildPerfOnly()) 502 ).BuildPerfOnly())
512 503
513 504
514 def _MakeBuilderAndMaybeTrybotSet(do_trybots=True, **kwargs): 505 def _MakeBuilderAndMaybeTrybotSet(do_trybots=True, **kwargs):
515 _MakeBuilderSet(try_schedulers=None, **kwargs) 506 _MakeBuilderSet(**kwargs)
516 if do_trybots: 507 if do_trybots:
517 _MakeBuilderSet(try_schedulers=TRY_SCHEDULERS, **kwargs) 508 _MakeBuilderSet(is_trybot=True, **kwargs)
518 509
519 510
520 def MakeBuilderSet(**kwargs): 511 def MakeBuilderSet(**kwargs):
521 _MakeBuilderAndMaybeTrybotSet(factory_type=skia_factory.SkiaFactory, **kwargs) 512 _MakeBuilderAndMaybeTrybotSet(factory_type=skia_factory.SkiaFactory, **kwargs)
522 513
523 514
524 def MakeHousekeeperBuilderSet(helper, do_trybots, do_upload_results): 515 def MakeHousekeeperBuilderSet(helper, do_trybots, do_upload_results):
525 B = helper.Builder 516 B = helper.Builder
526 F = helper.Factory 517 F = helper.Factory
527 518
528 builder_factory_scheduler = [ 519 builder_factory_scheduler = [
529 # The Percommit housekeeper 520 # The Percommit housekeeper
530 ('Skia_PerCommit_House_Keeping', 521 (MakeBuilderName(role='Housekeeper', frequency='PerCommit'),
531 housekeeping_percommit_factory.HouseKeepingPerCommitFactory, 522 housekeeping_percommit_factory.HouseKeepingPerCommitFactory,
532 'skia_rel'), 523 'skia_rel'),
533 # The Periodic housekeeper 524 # The Periodic housekeeper
534 ('Skia_Periodic_House_Keeping', 525 (MakeBuilderName(role='Housekeeper', frequency='Nightly'),
535 housekeeping_periodic_factory.HouseKeepingPeriodicFactory, 526 housekeeping_periodic_factory.HouseKeepingPeriodicFactory,
536 'skia_periodic'), 527 'skia_periodic'),
537 ] 528 ]
538 if do_trybots: 529 if do_trybots:
539 # Add the corresponding trybot builders to the above list. 530 # Add the corresponding trybot builders to the above list.
540 builder_factory_scheduler.extend([ 531 builder_factory_scheduler.extend([
541 (builder + TRYBOT_NAME_SUFFIX, factory, TRY_SCHEDULERS_STR) 532 (builder + BUILDER_NAME_SEP + TRYBOT_NAME_SUFFIX, factory,
533 TRY_SCHEDULERS_STR)
542 for (builder, factory, _scheduler) in builder_factory_scheduler]) 534 for (builder, factory, _scheduler) in builder_factory_scheduler])
543 535
544 for (builder_name, factory, scheduler) in builder_factory_scheduler: 536 for (builder_name, factory, scheduler) in builder_factory_scheduler:
545 B(builder_name, 'f_%s' % builder_name, scheduler=scheduler) 537 B(builder_name, 'f_%s' % builder_name, scheduler=scheduler)
546 F('f_%s' % builder_name, 538 F('f_%s' % builder_name,
547 factory( 539 factory(
548 do_upload_results=do_upload_results, 540 do_upload_results=do_upload_results,
549 target_platform=skia_factory.TARGET_PLATFORM_LINUX, 541 target_platform=skia_factory.TARGET_PLATFORM_LINUX,
550 builder_name=builder_name, 542 builder_name=builder_name,
551 do_patch_step=(scheduler == TRY_SCHEDULERS_STR), 543 do_patch_step=(scheduler == TRY_SCHEDULERS_STR),
552 ).Build()) 544 ).Build())
553 545
554 546
555 def MakeAndroidBuilderSet(extra_branches=None, **kwargs): 547 def _DeviceToModelName(device):
548 return device.replace('_', ' ').title().replace(' ', '')
rmistry 2013/04/25 11:36:45 Lets add a short comment here, something like: # '
549
550
551 def MakeAndroidBuilderSet(device, extra_branches=None, **kwargs):
556 if not extra_branches: 552 if not extra_branches:
557 extra_branches = [] 553 extra_branches = []
558 extra_branches.append('android') 554 extra_branches.append('android')
559 _MakeBuilderAndMaybeTrybotSet(factory_type=android_factory.AndroidFactory, 555 _MakeBuilderAndMaybeTrybotSet(factory_type=android_factory.AndroidFactory,
560 extra_branches=extra_branches, 556 extra_branches=extra_branches,
557 device=device,
558 model=_DeviceToModelName(device),
561 **kwargs) 559 **kwargs)
562 560
563 561
564 def MakeChromeOSBuilderSet(**kwargs): 562 def MakeChromeOSBuilderSet(**kwargs):
565 _MakeBuilderAndMaybeTrybotSet(factory_type=chromeos_factory.ChromeOSFactory, 563 _MakeBuilderAndMaybeTrybotSet(factory_type=chromeos_factory.ChromeOSFactory,
566 **kwargs) 564 **kwargs)
567 565
568 566
569 def MakeIOSBuilderSet(**kwargs): 567 def MakeIOSBuilderSet(**kwargs):
570 _MakeBuilderAndMaybeTrybotSet(factory_type=ios_factory.iOSFactory, **kwargs) 568 _MakeBuilderAndMaybeTrybotSet(factory_type=ios_factory.iOSFactory, **kwargs)
571 569
572 570
573 def MakeNaClBuilderSet(**kwargs): 571 def MakeNaClBuilderSet(**kwargs):
574 _MakeBuilderAndMaybeTrybotSet(factory_type=nacl_factory.NaClFactory, **kwargs) 572 _MakeBuilderAndMaybeTrybotSet(factory_type=nacl_factory.NaClFactory, **kwargs)
575 573
576 574
575 def _MakeCompileBuilder(helper, scheduler, os, compiler, configuration,
576 target_arch, factory_type, is_trybot,
577 extra_config=None, **kwargs):
578 builder_name = MakeBuilderName(role=BUILDER_ROLE_COMPILE,
579 os=os,
580 compiler=compiler,
581 configuration=configuration,
582 target_arch=target_arch,
583 extra_config=extra_config,
584 is_trybot=is_trybot)
585 helper.Builder(builder_name, 'f_%s' % builder_name,
586 # Do not add gatekeeper for trybots.
587 gatekeeper='GateKeeper' if is_trybot else None,
588 scheduler=scheduler)
589 helper.Factory('f_%s' % builder_name, factory_type(
590 builder_name=builder_name,
591 do_patch_step=is_trybot,
592 configuration=configuration,
593 **kwargs
594 ).BuildCompileOnly())
595 return builder_name
596
597
598 def MakeCompileBuilderSet(scheduler, do_trybots=True, **kwargs):
599 if do_trybots:
600 _MakeCompileBuilder(scheduler=scheduler, is_trybot=True, **kwargs)
601 _MakeCompileBuilder(scheduler=TRY_SCHEDULERS_STR, is_trybot=False, **kwargs)
602
603
604
577 def CanMergeBuildRequests(req1, req2): 605 def CanMergeBuildRequests(req1, req2):
578 """ Determine whether or not two BuildRequests can be merged. Note that the 606 """ Determine whether or not two BuildRequests can be merged. Note that the
579 call to buildbot.sourcestamp.SourceStamp.canBeMergedWith() is conspicuously 607 call to buildbot.sourcestamp.SourceStamp.canBeMergedWith() is conspicuously
580 missing. This is because that method verifies that: 608 missing. This is because that method verifies that:
581 1. req1.source.repository == req2.source.repository 609 1. req1.source.repository == req2.source.repository
582 2. req1.source.project == req2.source.project 610 2. req1.source.project == req2.source.project
583 3. req1.source.branch == req2.source.branch 611 3. req1.source.branch == req2.source.branch
584 4. req1.patch == None and req2.patch = None 612 4. req1.patch == None and req2.patch = None
585 5. (req1.source.changes and req2.source.changes) or \ 613 5. (req1.source.changes and req2.source.changes) or \
586 (not req1.source.changes and not req2.source.changes and \ 614 (not req1.source.changes and not req2.source.changes and \
(...skipping 27 matching lines...) Expand all
614 # request is associated with a change but the revisions match (#5 above). 642 # request is associated with a change but the revisions match (#5 above).
615 if req1.source.changes and not req2.source.changes: 643 if req1.source.changes and not req2.source.changes:
616 return False 644 return False
617 if not req1.source.changes and req2.source.changes: 645 if not req1.source.changes and req2.source.changes:
618 return False 646 return False
619 if not (req1.source.changes and req2.source.changes): 647 if not (req1.source.changes and req2.source.changes):
620 if req1.source.revision != req2.source.revision: 648 if req1.source.revision != req2.source.revision:
621 return False 649 return False
622 650
623 return True 651 return True
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698