Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/buildbot/buildbot/scripts/checkconfig.py
blob: 44dd7bc063b2ddc485d18c032984d2cad2322b00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import sys
import os
from shutil import copy, rmtree
from tempfile import mkdtemp
from os.path import isfile
import traceback

from buildbot import master

class ConfigLoader(master.BuildMaster):
    def __init__(self, configFileName="master.cfg"):
        master.BuildMaster.__init__(self, ".", configFileName)
        dir = os.getcwd()
        # Use a temporary directory since loadConfig() creates a bunch of
        # directories and compiles .py files
        tempdir = mkdtemp()
        try:
            copy(configFileName, tempdir)
            for entry in os.listdir("."):
                # Any code in a subdirectory will _not_ be copied! This is a bug
                if isfile(entry):
                    copy(entry, tempdir)
        except:
            raise

        try:
            os.chdir(tempdir)
            # Add the temp directory to the library path so local modules work
            sys.path.append(tempdir)
            configFile = open(configFileName, "r")
            self.loadConfig(configFile)
        except:
            os.chdir(dir)
            configFile.close()
            rmtree(tempdir)
            raise
        os.chdir(dir)
        rmtree(tempdir)

if __name__ == '__main__':
    try:
        if len(sys.argv) > 1:
            c = ConfigLoader(sys.argv[1])
        else:
            c = ConfigLoader()
    except IOError:
        print >> sys.stderr, "Could not open config file"
        sys.exit(2)
    except:
        print >> sys.stderr, "Error in config file:"
        t, v, tb = sys.exc_info()
        print >> sys.stderr, traceback.print_exception(t, v, tb)
        sys.exit(1)