예제 #1
0
 def test_rejectedCodeReview(self):
     # Rejecting a code review is also a significant event, and as such
     # gets its own karma event.
     proposal = self.factory.makeBranchMergeProposal()
     reviewer = proposal.target_branch.owner
     self.karma_events = []
     login_person(reviewer)
     with BranchMergeProposalNoPreviewDiffDelta.monitor(proposal):
         proposal.rejectBranch(reviewer, "A rev id.")
     self.assertOneKarmaEvent(reviewer, 'branchmergerejected')
예제 #2
0
 def test_approvingOwnCodeReview(self):
     # Approving your own merge proposal isn't such a significant event.
     reviewer = self.factory.makePerson()
     target_branch = self.factory.makeProductBranch(owner=reviewer)
     proposal = self.factory.makeBranchMergeProposal(
         target_branch=target_branch, registrant=reviewer)
     self.karma_events = []
     login_person(reviewer)
     with BranchMergeProposalNoPreviewDiffDelta.monitor(proposal):
         proposal.approveBranch(reviewer, "A rev id.")
     self.assertOneKarmaEvent(reviewer, 'branchmergeapprovedown')
예제 #3
0
 def test_rejectedOwnCodeReview(self):
     # Rejecting your own merge proposal isn't such a significant event
     # either, and I don't know why someone would, but hey, people are
     # strange.
     reviewer = self.factory.makePerson()
     target_branch = self.factory.makeProductBranch(owner=reviewer)
     proposal = self.factory.makeBranchMergeProposal(
         target_branch=target_branch, registrant=reviewer)
     self.karma_events = []
     login_person(reviewer)
     with BranchMergeProposalNoPreviewDiffDelta.monitor(proposal):
         proposal.rejectBranch(reviewer, "A rev id.")
     self.assertOneKarmaEvent(reviewer, 'branchmergerejectedown')
예제 #4
0
    def processCommands(self, context, commands):
        """Process the various merge proposal commands against the context."""
        processing_errors = []
        with BranchMergeProposalNoPreviewDiffDelta.monitor(
                context.merge_proposal):
            for command in commands:
                try:
                    command.execute(context)
                except EmailProcessingError as error:
                    processing_errors.append((error, command))

        if len(processing_errors) > 0:
            errors, commands = zip(*processing_errors)
            raise IncomingEmailError('\n'.join(str(error) for error in errors),
                                     list(commands))

        return len(commands)
예제 #5
0
def merge_detected(logger, source, target, proposal=None, merge_revno=None):
    """Handle the merge of source into target."""
    # If the target branch is not the development focus, then don't update
    # the status of the source branch.
    logger.info(
        'Merge detected: %s => %s',
        source.bzr_identity, target.bzr_identity)
    if proposal is None:
        # If there's no explicit merge proposal, only change the branch's
        # status when it has been merged into the development focus.
        if is_development_focus(target):
            mark_branch_merged(logger, source)
    else:
        with BranchMergeProposalNoPreviewDiffDelta.monitor(proposal):
            proposal.markAsMerged(merge_revno)
        # If there is an explicit merge proposal, change the branch's
        # status when it's been merged into a development focus or any
        # other series branch.
        if is_series_branch(proposal.target_branch):
            mark_branch_merged(logger, proposal.source_branch)