diff --git a/kallithea/controllers/pullrequests.py b/kallithea/controllers/pullrequests.py --- a/kallithea/controllers/pullrequests.py +++ b/kallithea/controllers/pullrequests.py @@ -182,8 +182,11 @@ class PullrequestsController(BaseRepoCon return False owner = self.authuser.user_id == pull_request.user_id - reviewer = self.authuser.user_id in [x.user_id for x in - pull_request.reviewers] + reviewer = PullRequestReviewers.query() \ + .filter(PullRequestReviewers.pull_request == pull_request) \ + .filter(PullRequestReviewers.user_id == self.authuser.user_id) \ + .count() != 0 + return self.authuser.admin or owner or reviewer @LoginRequired() diff --git a/kallithea/model/changeset_status.py b/kallithea/model/changeset_status.py --- a/kallithea/model/changeset_status.py +++ b/kallithea/model/changeset_status.py @@ -98,14 +98,14 @@ class ChangesetStatusModel(BaseModel): pull_request_reviewers = [] pull_request_pending_reviewers = [] relevant_statuses = [] - for r in pull_request.reviewers: - st = cs_statuses.get(r.user.username) + for user in pull_request.get_reviewer_users(): + st = cs_statuses.get(user.username) relevant_statuses.append(st) if not st or st.status in (ChangesetStatus.STATUS_NOT_REVIEWED, ChangesetStatus.STATUS_UNDER_REVIEW): st = None - pull_request_pending_reviewers.append(r.user) - pull_request_reviewers.append((r.user, st)) + pull_request_pending_reviewers.append(user) + pull_request_reviewers.append((user, st)) result = self._calculate_status(relevant_statuses) diff --git a/kallithea/model/comment.py b/kallithea/model/comment.py --- a/kallithea/model/comment.py +++ b/kallithea/model/comment.py @@ -139,7 +139,7 @@ class ChangesetCommentsModel(BaseModel): recipients += [pull_request.owner] # add the reviewers to notification - recipients += [x.user for x in pull_request.reviewers] + recipients += pull_request.get_reviewer_users() #set some variables for email notification email_kwargs = { diff --git a/kallithea/model/db.py b/kallithea/model/db.py --- a/kallithea/model/db.py +++ b/kallithea/model/db.py @@ -2322,6 +2322,14 @@ class PullRequest(Base, BaseModel): comments = relationship('ChangesetComment', order_by='ChangesetComment.comment_id', cascade="all, delete-orphan") + def get_reviewer_users(self): + """Like .reviewers, but actually returning the users""" + return User.query() \ + .join(PullRequestReviewers) \ + .filter(PullRequestReviewers.pull_request == self) \ + .order_by(PullRequestReviewers.pull_requests_reviewers_id) \ + .all() + def is_closed(self): return self.status == self.STATUS_CLOSED