##// END OF EJS Templates
pull requests: prevent adding DEFAULT user as reviewer...
Søren Løvborg -
r5841:1658beb2 default
parent child Browse files
Show More
@@ -35,7 +35,7 b' from kallithea.lib import helpers as h'
35 from kallithea.lib.exceptions import UserInvalidException
35 from kallithea.lib.exceptions import UserInvalidException
36 from kallithea.model import BaseModel
36 from kallithea.model import BaseModel
37 from kallithea.model.db import PullRequest, PullRequestReviewers, Notification, \
37 from kallithea.model.db import PullRequest, PullRequestReviewers, Notification, \
38 ChangesetStatus
38 ChangesetStatus, User
39 from kallithea.model.notification import NotificationModel
39 from kallithea.model.notification import NotificationModel
40 from kallithea.lib.utils2 import extract_mentioned_users, safe_unicode
40 from kallithea.lib.utils2 import extract_mentioned_users, safe_unicode
41
41
@@ -71,6 +71,17 b' class PullRequestModel(BaseModel):'
71 q = q.filter(PullRequest.status != PullRequest.STATUS_CLOSED)
71 q = q.filter(PullRequest.status != PullRequest.STATUS_CLOSED)
72 return q.order_by(PullRequest.created_on.desc()).all()
72 return q.order_by(PullRequest.created_on.desc()).all()
73
73
74 def _get_valid_reviewers(self, seq):
75 """ Generate User objects from a sequence of user IDs, usernames or
76 User objects. Raises UserInvalidException if the DEFAULT user is
77 specified, or if a given ID or username does not match any user.
78 """
79 for user_spec in seq:
80 user = self._get_user(user_spec)
81 if user is None or user.username == User.DEFAULT_USER:
82 raise UserInvalidException(user_spec)
83 yield user
84
74 def create(self, created_by, org_repo, org_ref, other_repo, other_ref,
85 def create(self, created_by, org_repo, org_ref, other_repo, other_ref,
75 revisions, reviewers, title, description=None):
86 revisions, reviewers, title, description=None):
76 from kallithea.model.changeset_status import ChangesetStatusModel
87 from kallithea.model.changeset_status import ChangesetStatusModel
@@ -109,18 +120,17 b' class PullRequestModel(BaseModel):'
109 pull_request=new
120 pull_request=new
110 )
121 )
111
122
123 reviewers = set(self._get_valid_reviewers(reviewers))
112 mention_recipients = extract_mentioned_users(new.description)
124 mention_recipients = extract_mentioned_users(new.description)
113 self.__add_reviewers(created_by_user, new, reviewers, mention_recipients)
125 self.__add_reviewers(created_by_user, new, reviewers, mention_recipients)
114
126
115 return new
127 return new
116
128
117 def __add_reviewers(self, user, pr, reviewers, mention_recipients=None):
129 def __add_reviewers(self, user, pr, reviewers, mention_recipients):
130 # reviewers and mention_recipients should be sets of User objects.
118 #members
131 #members
119 for member in set(reviewers):
132 for reviewer in reviewers:
120 _usr = self._get_user(member)
133 reviewer = PullRequestReviewers(reviewer, pr)
121 if _usr is None:
122 raise UserInvalidException(member)
123 reviewer = PullRequestReviewers(_usr, pr)
124 Session().add(reviewer)
134 Session().add(reviewer)
125
135
126 revision_data = [(x.raw_id, x.message)
136 revision_data = [(x.raw_id, x.message)
@@ -176,7 +186,7 b' class PullRequestModel(BaseModel):'
176 extract_mentioned_users(old_description))
186 extract_mentioned_users(old_description))
177
187
178 log.debug("Mentioning %s", mention_recipients)
188 log.debug("Mentioning %s", mention_recipients)
179 self.__add_reviewers(user, pr, [], mention_recipients)
189 self.__add_reviewers(user, pr, set(), mention_recipients)
180
190
181 def update_reviewers(self, user, pull_request, reviewers_ids):
191 def update_reviewers(self, user, pull_request, reviewers_ids):
182 reviewers_ids = set(reviewers_ids)
192 reviewers_ids = set(reviewers_ids)
@@ -191,7 +201,7 b' class PullRequestModel(BaseModel):'
191 to_remove = current_reviewers_ids.difference(reviewers_ids)
201 to_remove = current_reviewers_ids.difference(reviewers_ids)
192
202
193 log.debug("Adding %s reviewers", to_add)
203 log.debug("Adding %s reviewers", to_add)
194 self.__add_reviewers(user, pull_request, to_add)
204 self.__add_reviewers(user, pull_request, set(self._get_valid_reviewers(to_add)), set())
195
205
196 log.debug("Removing %s reviewers", to_remove)
206 log.debug("Removing %s reviewers", to_remove)
197 for uid in to_remove:
207 for uid in to_remove:
General Comments 0
You need to be logged in to leave comments. Login now