Exemple #1
0
    def post(self, build_id):
        build = Build.query.options(
            joinedload('project', innerjoin=True),
            joinedload('author'),
            joinedload('source'),
        ).get(build_id)
        if build is None:
            return '', 404

        if build.status != Status.finished:
            return '', 400

        # remove any existing job data
        # TODO(dcramer): this is potentially fairly slow with cascades
        Job.query.filter(
            Job.build == build
        ).delete()

        ItemStat.query.filter(
            ItemStat.item_id == build.id
        ).delete()

        build.date_started = datetime.utcnow()
        build.date_modified = build.date_started
        build.date_finished = None
        build.duration = None
        build.status = Status.queued
        build.result = Result.unknown
        db.session.add(build)

        execute_build(build=build)

        return self.respond(build)
Exemple #2
0
    def post(self, build_id):
        build = Build.query.options(
            joinedload('project', innerjoin=True),
            joinedload('author'),
            joinedload('source').joinedload('revision'),
        ).get(build_id)
        if build is None:
            return '', 404

        if build.status != Status.finished:
            return '', 400

        # ItemStat doesnt cascade by itself
        stat_ids = [build.id]
        job_ids = [
            j[0] for j in
            db.session.query(Job.id).filter(Job.build_id == build.id)
        ]
        if job_ids:
            step_ids = [
                s[0] for s in
                db.session.query(JobStep.id).filter(JobStep.job_id.in_(job_ids))
            ]
            stat_ids.extend(job_ids)
            stat_ids.extend(step_ids)

        if stat_ids:
            ItemStat.query.filter(
                ItemStat.item_id.in_(stat_ids),
            ).delete(synchronize_session=False)

        # remove any existing job data
        # TODO(dcramer): this is potentially fairly slow with cascades
        Job.query.filter(
            Job.build_id == build.id
        ).delete(synchronize_session=False)

        build.date_started = datetime.utcnow()
        build.date_modified = build.date_started
        build.date_finished = None
        build.duration = None
        build.status = Status.queued
        build.result = Result.unknown
        db.session.add(build)

        execute_build(build=build)

        return self.respond(build)
Exemple #3
0
    def post(self, build_id):
        build = Build.query.options(
            joinedload('project', innerjoin=True),
            joinedload('author'),
            joinedload('source'),
        ).get(build_id)
        if build is None:
            return '', 404

        if build.status != Status.finished:
            return '', 400

        # ItemStat doesnt cascade by itself
        stat_ids = [build.id]
        job_ids = [
            j[0] for j in
            db.session.query(Job.id).filter(Job.build_id == build.id)
        ]
        if job_ids:
            step_ids = [
                s[0] for s in
                db.session.query(JobStep.id).filter(JobStep.job_id.in_(job_ids))
            ]
            stat_ids.extend(job_ids)
            stat_ids.extend(step_ids)

        if stat_ids:
            ItemStat.query.filter(
                ItemStat.item_id.in_(stat_ids),
            ).delete(synchronize_session=False)

        # remove any existing job data
        # TODO(dcramer): this is potentially fairly slow with cascades
        Job.query.filter(
            Job.build_id == build.id
        ).delete(synchronize_session=False)

        build.date_started = datetime.utcnow()
        build.date_modified = build.date_started
        build.date_finished = None
        build.duration = None
        build.status = Status.queued
        build.result = Result.unknown
        db.session.add(build)

        execute_build(build=build)

        return self.respond(build)