Exemple #1
0
    def put(self, review_id):
        # for adding rounds
        print flask.request.json

        review = db.session().query(model.Review).filter_by(review_id=review_id).one()
        branches = git.branch_list(review.project_id)

        # extract and validate arguments
        base_branch = flask.request.json.get('merge_base_branch')
        review_branch = flask.request.json.get('branch_tip_name')

        base_commit = [branch for branch in branches if branch['name'] == base_branch]
        review_commit = [branch for branch in branches if branch['name'] == review_branch]

        if review_branch is None or len(base_commit) != 1 or len(review_commit) != 1:
            flask.abort(400)

        base_commit = base_commit[0]['commit']
        review_commit = review_commit[0]['commit']

        # replace HEAD of base branch with merge-base of the two branches
        base_commit = git.merge_base(review.project_id, base_commit, review_commit)

        # if this is the same as the latest round, don't add it
        latest_round = review.rounds[-1]

        if (latest_round.merge_base_branch == base_branch and
            latest_round.merge_base_commit == base_commit and
            latest_round.branch_tip_name == review_branch and
            latest_round.branch_tip_commit == review_commit):
            return self.get(review_id)

        # create round from base to branch
        round = create_round(review, base_branch, base_commit, review_branch, review_commit)
        db.session().add(round)

        db.session().commit()

        return self.get(review_id)
Exemple #2
0
 def get(self, project_id):
     return dict((branch['name'], branch) for branch in git.branch_list(project_id))