1# -*- coding: utf-8 -*-
2#
3# Copyright 2015 Michael Lotz
4# Copyright 2016 Jerome Duval
5# Distributed under the terms of the MIT License.
6
7import json
8import logging
9import os
10import stat
11import time
12
13from .Builder import BuilderState
14
15
16class LocalBuilder(object):
17	def __init__(self, name, packagesPath, outputBaseDir, options):
18		self.options = options
19		self.name = name
20		self.buildCount = 0
21		self.failedBuilds = 0
22		self.packagesPath = packagesPath
23		self.state = BuilderState.AVAILABLE
24		self.currentBuild = None
25
26		self.buildOutputDir = os.path.join(outputBaseDir, 'builds')
27		if not os.path.isdir(self.buildOutputDir):
28			os.makedirs(self.buildOutputDir)
29
30		self.buildLogger = logging.getLogger('builders.' + self.name + '.build')
31		self.buildLogger.setLevel(logging.DEBUG)
32
33	def setBuild(self, scheduledBuild, buildNumber):
34		logHandler = logging.FileHandler(os.path.join(self.buildOutputDir,
35				str(buildNumber) + '.log'))
36		logHandler.setFormatter(logging.Formatter('%(message)s'))
37		self.buildLogger.addHandler(logHandler)
38		filter = ThreadFilter()
39		logHandler.addFilter(filter)
40		logging.getLogger("buildLogger").setLevel(logging.DEBUG)
41		logging.getLogger("buildLogger").addHandler(logHandler)
42
43		self.currentBuild = {
44			'build': scheduledBuild,
45			'status': scheduledBuild.status,
46			'number': buildNumber,
47			'logHandler': logHandler,
48			'logFilter': filter,
49			'startTime': None,
50			'phase': 'setup',
51			'lines': 0
52		}
53		filter.setBuild(self.currentBuild)
54
55
56	def unsetBuild(self):
57		self.buildLogger.removeHandler(self.currentBuild['logHandler'])
58		logging.getLogger("buildLogger").removeHandler(
59			self.currentBuild['logHandler'])
60		self.currentBuild = None
61
62	def runBuild(self):
63		scheduledBuild = self.currentBuild['build']
64