Beispiel #1
0
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'
Beispiel #2
0
    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)