diff --git a/kodiak/evaluation.py b/kodiak/evaluation.py index 4d8271aa1..26bdf1b99 100644 --- a/kodiak/evaluation.py +++ b/kodiak/evaluation.py @@ -63,14 +63,23 @@ class MissingAppID(BaseException): another instance of kodiak. """ + def __str__(self) -> str: + return "missing Github app id" + class BranchMerged(BaseException): """branch has already been merged""" + def __str__(self) -> str: + return str(self.__doc__) + class MergeConflict(BaseException): """Merge conflict in the PR.""" + def __str__(self) -> str: + return "merge conflict" + def review_status(reviews: typing.List[PRReview]) -> PRReviewState: """ diff --git a/kodiak/pull_request.py b/kodiak/pull_request.py index d9011ba1b..26ec37f92 100644 --- a/kodiak/pull_request.py +++ b/kodiak/pull_request.py @@ -150,16 +150,24 @@ async def mergeability( valid_merge_methods=self.event.valid_merge_methods, ) self.log.info("okay") + await self.set_status(summary="⛴ ready to merge") return MergeabilityResponse.OK, self.event - except MissingAppID: - return MergeabilityResponse.NOT_MERGEABLE, self.event - except NotQueueable as e: - await self.set_status(summary="🛑 cannot merge", detail=str(e)) - return MergeabilityResponse.NOT_MERGEABLE, self.event - except MergeConflict: - await self.set_status(summary="🛑 cannot merge", detail="merge conflict") - if self.event.config.merge.notify_on_conflict: + except (NotQueueable, MissingAppID, MergeConflict, BranchMerged) as e: + if ( + isinstance(e, MergeConflict) + and self.event.config.merge.notify_on_conflict + ): await self.notify_pr_creator() + + if ( + isinstance(e, BranchMerged) + and self.event.config.merge.delete_branch_on_merge + ): + await self.client.delete_branch( + branch=self.event.pull_request.headRefName + ) + + await self.set_status(summary="🛑 cannot merge", detail=str(e)) return MergeabilityResponse.NOT_MERGEABLE, self.event except MissingGithubMergeabilityState: self.log.info("missing mergeability state, need refresh") @@ -170,15 +178,6 @@ async def mergeability( except NeedsBranchUpdate: await self.set_status(summary="⏭ need update") return MergeabilityResponse.NEEDS_UPDATE, self.event - except BranchMerged: - await self.set_status( - summary="🛑 cannot merge", detail="branch merged already" - ) - if self.event.config.merge.delete_branch_on_merge: - await self.client.delete_branch( - branch=self.event.pull_request.headRefName - ) - return MergeabilityResponse.NOT_MERGEABLE, self.event async def update(self) -> None: self.log.info("update")