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 |
|
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 |
|
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, |
|
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