def create_review(conduit, branch): branch.verify_review_branch_base() # TODO: we should also cc other users on the branch # TODO: if there are emails that don't match up to users then we should # note that on the review and perhaps use the mailer to notify them name, email, user, phid = abdt_conduitgit.getPrimaryUserDetailsFromBranch( conduit, branch) _LOGGER.debug("- author: {}".format(user)) user_warnings = [] message = branch.get_commit_message_from_tip() parsed = conduit.parse_commit_message(message) d = phlcon_differential if parsed.errors: error_list = phlcon_differential.parse_commit_message_errors( parsed.errors) for error in error_list: if isinstance(error, d.ParseCommitMessageNoTestPlanFail): parsed.fields["testPlan"] = _DEFAULT_TEST_PLAN user_warnings.append( abdt_userwarning.UsedDefaultTestPlan(_DEFAULT_TEST_PLAN)) elif isinstance(error, d.ParseCommitMessageUnknownReviewerFail): user_warnings.append( abdt_userwarning.UnknownReviewers( error.user_list, message)) else: raise abdt_exception.CommitMessageParseException( errors=parsed.errors, fields=parsed.fields, digest=branch.make_message_digest()) # remove the author from reviewer list if present reviewer_phids_key = phlcon_differential.MessageFields.reviewer_phids if reviewer_phids_key in parsed.fields: reviewer_phids = parsed.fields[reviewer_phids_key] if phid in reviewer_phids: reviewer_phids.remove(phid) user_warnings.append(abdt_userwarning.SelfReviewer(user, message)) diff_result = branch.make_raw_diff() raw_diff = diff_result.diff if not raw_diff: raise abdt_exception.AbdUserException("no difference to review") if diff_result.reduction_list: user_warnings.append(abdt_userwarning.LargeDiff(diff_result)) revisionid = create_differential_review( conduit, user, parsed, branch, raw_diff) commenter = abdcmnt_commenter.Commenter(conduit, revisionid) if user_warnings: commenter.userWarnings(user_warnings)
def create_review(conduit, branch, plugin_manager): plugin_manager.hook( "before_create_review", {"conduit": conduit, "branch": branch}) branch.verify_review_branch_base() # TODO: we should also cc other users on the branch # TODO: if there are emails that don't match up to users then we should # note that on the review and perhaps use the mailer to notify them name, email, user, phid = abdt_conduitgit.getPrimaryUserDetailsFromBranch( conduit, branch) print "- author: " + user used_default_test_plan = False removed_self_reviewer = False # try to get phabricator to parse the commit message and give us fields parsed = abdt_conduitgit.getFieldsFromBranch(conduit, branch) if parsed.errors: used_default_test_plan = True parsed = abdt_conduitgit.getFieldsFromBranch( conduit, branch, _DEFAULT_TEST_PLAN) if parsed.errors: print parsed raise abdt_exception.CommitMessageParseException( errors=parsed.errors, fields=parsed.fields, digest=branch.make_message_digest()) # remove the author from reviewer list if present reviewer_phids_key = phlcon_differential.MessageFields.reviewer_phids if reviewer_phids_key in parsed.fields: reviewer_phids = parsed.fields[reviewer_phids_key] if phid in reviewer_phids: reviewer_phids.remove(phid) removed_self_reviewer = True rawDiff = branch.make_raw_diff() if not rawDiff: raise abdt_exception.AbdUserException("no difference to review") revisionid = create_differential_review( conduit, user, parsed, branch, rawDiff) commenter = abdcmnt_commenter.Commenter(conduit, revisionid) if used_default_test_plan: commenter.usedDefaultTestPlan( branch.review_branch_name(), _DEFAULT_TEST_PLAN) if removed_self_reviewer: commenter.removedSelfReviewer( branch.review_branch_name(), branch.make_message_digest()) plugin_manager.hook( "after_create_review", {"parsed": parsed, "conduit": conduit, "branch": branch, "rawDiff": rawDiff, "commenter": commenter} )
def create_review(conduit, branch, plugin_manager): plugin_manager.hook( "before_create_review", {"conduit": conduit, "branch": branch}) branch.verify_review_branch_base() # TODO: we should also cc other users on the branch # TODO: if there are emails that don't match up to users then we should # note that on the review and perhaps use the mailer to notify them name, email, user, phid = abdt_conduitgit.getPrimaryUserDetailsFromBranch( conduit, branch) print "- author: " + user user_warnings = [] message = branch.get_commit_message_from_tip() parsed = conduit.parse_commit_message(message) d = phlcon_differential if parsed.errors: error_list = phlcon_differential.parse_commit_message_errors( parsed.errors) for error in error_list: if isinstance(error, d.ParseCommitMessageNoTestPlanFail): parsed.fields["testPlan"] = _DEFAULT_TEST_PLAN user_warnings.append( abdt_userwarning.UsedDefaultTestPlan(_DEFAULT_TEST_PLAN)) elif isinstance(error, d.ParseCommitMessageUnknownReviewerFail): user_warnings.append( abdt_userwarning.UnknownReviewers( error.user_list, message)) else: raise abdt_exception.CommitMessageParseException( errors=parsed.errors, fields=parsed.fields, digest=branch.make_message_digest()) # remove the author from reviewer list if present reviewer_phids_key = phlcon_differential.MessageFields.reviewer_phids if reviewer_phids_key in parsed.fields: reviewer_phids = parsed.fields[reviewer_phids_key] if phid in reviewer_phids: reviewer_phids.remove(phid) user_warnings.append(abdt_userwarning.SelfReviewer(user, message)) rawDiff = branch.make_raw_diff() if not rawDiff: raise abdt_exception.AbdUserException("no difference to review") revisionid = create_differential_review( conduit, user, parsed, branch, rawDiff) commenter = abdcmnt_commenter.Commenter(conduit, revisionid) if user_warnings: commenter.userWarnings(user_warnings) plugin_manager.hook( "after_create_review", {"parsed": parsed, "conduit": conduit, "branch": branch, "rawDiff": rawDiff, "commenter": commenter} ) abdt_logging.on_review_event( 'createrev', '{} created {} from {}'.format( user, revisionid, branch.review_branch_name()))
def create_review(conduit, branch): branch.verify_review_branch_base() # TODO: we should also cc other users on the branch # TODO: if there are emails that don't match up to users then we should # note that on the review and perhaps use the mailer to notify them name, email, user, phid = abdt_conduitgit.getPrimaryUserDetailsFromBranch( conduit, branch) _LOGGER.debug("- author: {}".format(user)) user_warnings = [] message = branch.get_commit_message_from_tip() try: parsed = conduit.parse_commit_message(message) except phlcon_differential.UnknownParseCommitMessageResponseError as e: raise abdt_exception.CommitMessageParseException(errors=[e], fields=[], digest=message) d = phlcon_differential if parsed.errors: error_list = phlcon_differential.parse_commit_message_errors( parsed.errors) for error in error_list: if isinstance(error, d.ParseCommitMessageNoTestPlanFail): parsed.fields["testPlan"] = _DEFAULT_TEST_PLAN user_warnings.append( abdt_userwarning.UsedDefaultTestPlan(_DEFAULT_TEST_PLAN)) elif isinstance(error, d.ParseCommitMessageUnknownReviewerFail): user_warnings.append( abdt_userwarning.UnknownReviewers(error.user_list, message)) else: raise abdt_exception.CommitMessageParseException( errors=parsed.errors, fields=parsed.fields, digest=branch.make_message_digest()) # remove the author from reviewer list if present reviewer_phids_key = phlcon_differential.MessageFields.reviewer_phids if reviewer_phids_key in parsed.fields: reviewer_phids = parsed.fields[reviewer_phids_key] if phid in reviewer_phids: reviewer_phids.remove(phid) user_warnings.append(abdt_userwarning.SelfReviewer(user, message)) diff_result = branch.make_raw_diff() raw_diff = diff_result.diff if not raw_diff: raise abdt_exception.AbdUserException("no difference to review") if diff_result.reduction_list: user_warnings.append(abdt_userwarning.LargeDiff(diff_result)) revisionid = create_differential_review(conduit, user, parsed, branch, raw_diff) commenter = abdcmnt_commenter.Commenter(conduit, revisionid) if user_warnings: commenter.userWarnings(user_warnings)