# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# These modules come from scripts/master, which must be in the PYTHONPATH.
from master import master_utils
from master import slaves_list

import config
import master_site_config
ActiveMaster = master_site_config.ChromiumLinux

c = BuildmasterConfig = {}
c['change_source'] = []
c['schedulers'] = []
c['builders'] = []
c['status'] = []

config.DatabaseSetup(c)

import master_source_cfg
import master_linux_cfg
import master_android_cfg

master_source_cfg.Update(config, ActiveMaster, c)

master_linux_cfg.Update(config, ActiveMaster, c)
master_android_cfg.Update(config, ActiveMaster, c)

c['logCompressionLimit'] = False
c['projectName'] = ActiveMaster.project_name
c['projectURL'] = config.Master.project_url
# Must come before AutoSetupMaster().
c['buildbotURL'] = ActiveMaster.buildbot_url

# Associate the slaves to the manual builders. The configuration is in
# slaves.cfg.
slaves = slaves_list.SlavesList('slaves.cfg', 'ChromiumLinux')
for builder in c['builders']:
  builder['slavenames'] = slaves.GetSlavesName(builder=builder['name'])

# The 'slaves' list defines the set of allowable buildslaves. List all the
# slaves registered to a builder. Remove dupes.
c['slaves'] = master_utils.AutoSetupSlaves(
    c['builders'],
    config.Master.GetBotPassword())
master_utils.VerifySetup(c, slaves)

# Adds common status and tools to this master.
master_utils.AutoSetupMaster(c, ActiveMaster,
    public_html='../master.chromium/public_html',
    templates=['../master.chromium/templates'],
    tagComparator=getattr(c['change_source'][0], 'comparator', None),
    enable_http_status_push=ActiveMaster.is_production_host)

# Do it at the end to override values set by AutoSetupMaster, the default is
# too low. Must keep at least a few days worth of builds.
c['buildHorizon'] = 3000
c['logHorizon'] = 3000
# Must be at least 2x the number of slaves.
c['eventHorizon'] = 200
