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)
def get(self, project_id): return dict((branch['name'], branch) for branch in git.branch_list(project_id))