def handle(builds, environ, cmd=None): error = None try: settings = json.loads(query(environ, 'settings', '{}')) except: log.exception("Error in json parsing the settings variable") error = escape(make_trace()) settings = {} for e in sorted(settings_validator.iter_errors(settings)): if error is None: error = "" error += str(e) + "\n" if error is not None: log.error("Errors from schema: " + error) yield '<result>\n<error>' + error + '</error>\n</result>\n' else: incremental = query(environ, 'incremental', '') incremental = incremental.lower() == 'true' try: if cmd == "makefile": log.info("Returning makefile") yield makefile(settings) elif cmd == "join": log.info("Joining existing build") yield "<result>\n" hashnumber = query(environ, 'hash', '') for k in join_from_hash(builds, hashnumber, incremental): yield k else: log.info("Starting a new build") yield "<result>\n" for k in build(builds, text(environ), settings, incremental, "xml"): yield k except: trace = make_trace() log.exception("Error in handle") yield '<trace>' + escape(trace) + '</trace>\n' yield '</result>\n'
def run(self, fmt): """ Runs make, catching errors """ self.make_process = None self.trace, self.stdout, self.stderr = ("", "", "") try: self._run(fmt) except: self.trace = make_trace() log.exception("Error when running make") self.stdout = "".join(self.make_out) if self.make_process: self.stderr = self.make_process.stderr.read().rstrip() self.change_status(Status.Error)