Skip to content

Commit

Permalink
Merge branch 'ticket2310' of git://github.com/imccowan/buildbot
Browse files Browse the repository at this point in the history
  • Loading branch information
djmitche committed Mar 19, 2013
2 parents 16e9ede + 7f02964 commit 69fc8c7
Show file tree
Hide file tree
Showing 7 changed files with 53 additions and 10 deletions.
2 changes: 1 addition & 1 deletion master/buildbot/config.py
Expand Up @@ -276,7 +276,7 @@ def copy_str_param(name, alt_key=None):
error("codebaseGenerator must be a callable accepting a dict and returning a str")
else:
self.codebaseGenerator = codebaseGenerator

prioritizeBuilders = config_dict.get('prioritizeBuilders')
if prioritizeBuilders is not None and not callable(prioritizeBuilders):
error("prioritizeBuilders must be a callable")
Expand Down
14 changes: 14 additions & 0 deletions master/buildbot/scripts/base.py
Expand Up @@ -30,6 +30,20 @@ def isBuildmasterDir(dir):
contents = f.read()
return "Application('buildmaster')" in contents

def getConfigFileWithFallback(basedir, defaultName='master.cfg'):
configFile = os.path.abspath(os.path.join(basedir, defaultName))
if os.path.exists(configFile):
return configFile
# execute the .tac file to see if its configfile location exists
tacFile = os.path.join(basedir, 'buildbot.tac')
if os.path.exists(tacFile):
# don't mess with the global namespace
tacGlobals = {}
execfile(tacFile, tacGlobals)
return tacGlobals["configfile"]
# No config file found; return default location and fail elsewhere
return configFile

class SubcommandOptions(usage.Options):
# subclasses should set this to a list-of-lists in order to source the
# .buildbot/options file. Note that this *only* works with optParameters,
Expand Down
6 changes: 3 additions & 3 deletions master/buildbot/scripts/checkconfig.py
Expand Up @@ -16,12 +16,12 @@
import sys
import os
from buildbot import config
from buildbot.scripts.base import getConfigFileWithFallback

class ConfigLoader(object):
def __init__(self, basedir=os.getcwd(), configFileName="master.cfg"):
def __init__(self, basedir=os.getcwd(), configFileName='master.cfg'):
self.basedir = os.path.abspath(basedir)
self.configFileName = os.path.abspath(
os.path.join(basedir, configFileName))
self.configFileName = getConfigFileWithFallback(basedir, configFileName)

def load(self, quiet=False):
try:
Expand Down
9 changes: 5 additions & 4 deletions master/buildbot/scripts/upgrade_master.py
Expand Up @@ -45,13 +45,13 @@ def checkBasedir(config):

return True

def loadConfig(config):
def loadConfig(config, configFileName='master.cfg'):
if not config['quiet']:
print "checking master.cfg"
print "checking %s" % configFileName

try:
master_cfg = config_module.MasterConfig.loadConfig(
config['basedir'], 'master.cfg')
config['basedir'], configFileName)
except config_module.ConfigErrors, e:
print "Errors loading configuration:"
for msg in e.errors:
Expand Down Expand Up @@ -160,7 +160,8 @@ def upgradeMaster(config, _noMonkey=False):

os.chdir(config['basedir'])

master_cfg = loadConfig(config)
configFile = base.getConfigFileWithFallback(config['basedir'])
master_cfg = loadConfig(config, configFile)
if not master_cfg:
defer.returnValue(1)
return
Expand Down
3 changes: 2 additions & 1 deletion master/buildbot/test/unit/test_config.py
Expand Up @@ -31,6 +31,7 @@
from buildbot.changes import base as changes_base
from buildbot.schedulers import base as schedulers_base
from buildbot.status import base as status_base
from buildbot.scripts.base import getConfigFileWithFallback

global_defaults = dict(
title='Buildbot',
Expand Down Expand Up @@ -119,7 +120,7 @@ class MasterConfig(ConfigErrorsMixin, dirs.DirsMixin, unittest.TestCase):

def setUp(self):
self.basedir = os.path.abspath('basedir')
self.filename = 'test.cfg'
self.filename = os.path.join(self.basedir, 'test.cfg')
return self.setUpDirs('basedir')

def tearDown(self):
Expand Down
27 changes: 27 additions & 0 deletions master/buildbot/test/unit/test_scripts_base.py
Expand Up @@ -50,6 +50,33 @@ def test_isBuildmasterDir_matches(self):
self.assertTrue(base.isBuildmasterDir(os.path.abspath('test')))
self.assertWasQuiet()

class TestTacFallback(dirs.DirsMixin, unittest.TestCase):

def setUp(self):
self.basedir = os.path.abspath('basedir')
self.stdout = cStringIO.StringIO()
self.filename = 'master.cfg'
return self.setUpDirs('basedir')

def test_tacFallback_location_from_tac(self):
tacfile = os.path.join(self.basedir, "buildbot.tac")
otherConfigFile = os.path.join(self.basedir, "other.cfg")
with open(tacfile, "wt") as f:
f.write("configfile = '%s'" % otherConfigFile)
with open(otherConfigFile, "wt") as f:
f.write("#dummy")
self.filename = base.getConfigFileWithFallback(self.basedir)
self.assertEqual(self.filename, otherConfigFile)

def test_tacFallback_noFallback(self):
defaultFilename = self.filename
with open(self.filename, "wt") as f:
f.write("#dummy")
self.filename = base.getConfigFileWithFallback(self.basedir)
self.assertEqual(self.filename,
os.path.join(self.basedir, defaultFilename))


class TestSubcommandOptions(unittest.TestCase):

def fakeOptionsFile(self, **kwargs):
Expand Down
2 changes: 1 addition & 1 deletion master/buildbot/test/unit/test_scripts_upgrade_master.py
Expand Up @@ -48,7 +48,7 @@ def checkBasedir(config):
return basedirOk
self.patch(upgrade_master, 'checkBasedir', checkBasedir)

def loadConfig(config):
def loadConfig(config, configFileName='master.cfg'):
self.calls.append('loadConfig')
return config_module.MasterConfig() if configOk else False
self.patch(upgrade_master, 'loadConfig', loadConfig)
Expand Down

0 comments on commit 69fc8c7

Please sign in to comment.