def open_mr(): git_tool.fetch(['master']) if git_tool.is_branch_diverged('origin/master'): mr = cr_tool.create_mr(git_tool.get_repo(), squashed_branch, assignee, "WIP: "+title) cr_tool.approve_build(git_tool.get_repo(), squashed_branch, build_number) im_tool.send_message(hipchat_assigner, "MR {0} has been assigned to @{1}".format(mr, hipchat_assignee)) im_tool.send_message(hipchat_assignee, "Hey, @{0} sent you a MR to review: {1}".format(hipchat_assigner, mr)) return mr, None return None, None
def check_open_mr(): repo = git_tool.get_repo() project = cr_tool.get_project(repo) mr = cr_tool.get_open_mr(project, branchname) if mr is not None: print RED("ALERT: merge request is still open in GitLab for {}!".format(repo)) return None, "ALERT: merge request is still open in GitLab" return None, None
def should_revert(commit): message = commit['message'] if "This reverts commit" in message: revert_commit = commit['id'] reverted_commit = message.split("This reverts commit", 1)[1].strip(' .') excluded_commits.add(revert_commit) excluded_commits.add(reverted_commit) print '{repo}: {reverted_commit} is already reverted by {revert_commit}'\ .format(repo=git_tool.get_repo(), reverted_commit=reverted_commit, revert_commit=revert_commit) return False return not commit['id'] in excluded_commits
def is_ready_to_land(): if not fetched: git_tool.fetch([branchname, 'master']) if git_tool.is_merged_with("origin/%s" % branchname, ref="origin/master"): return None, None err = [] if not git_tool.is_merged_with("origin/master", ref="origin/%s" % branchname): err.append("Not rebased!") approvals = list(cr_tool.get_signed_comments(git_tool.get_repo(), branchname)) body = lambda x: x['body'] built = filter(compose(cr_tool.ApproveBuild.filter_message, body), approvals) cr = filter(compose(cr_tool.ApproveCR.filter_message, body), approvals) qa = filter(compose(cr_tool.ApproveQA.filter_message, body), approvals) ui = filter(compose(cr_tool.ApproveUITests.filter_message, body), approvals) probe = filter(compose(cr_tool.ApproveProbeTests.filter_message, body), approvals) ret = [] if len(built) == 0: err.append("Wasn't built!") else: ret.extend('Built by %s at %s' % (x['author']['name'], x['created_at']) for x in built) if len(cr) == 0: err.append("Wasn't reviewed!") else: ret.extend('Reviewd by %s at %s' % (x['author']['name'], x['created_at']) for x in cr) if len(qa) == 0: err.append("Didn't pass QA!") else: ret.extend("Passed QA's %s at %s" % (x['author']['name'], x['created_at']) for x in qa) if len(ui) == 0: err.append("Didn't pass UI tests!") else: ret.extend("Passed UI Tests at %s" % x['created_at'] for x in ui) if len(probe) == 0: err.append("Didn't pass Probe benchmark test") else: ret.extend("Passed Probe benchmark test at %s" % x['created_at'] for x in probe) return "\n".join(ret), (None if len(err) == 0 else "\n".join(err))
def approve(): if git_tool.is_merged_with("origin/%s" % branchname, ref="origin/master"): return None, None added = self.APPROVAL_FUNC(git_tool.get_repo(), branchname) return added, None
def protect(): repo = git_tool.get_repo() success = cr_tool.protect_branch(repo, branchname) return None, None if success else "Failed"
def close(): if git_tool.is_merged_with("origin/%s" % branchname, ref="origin/master"): return None, None closed = cr_tool.close_mr(git_tool.get_repo(), branchname) return closed, None