##// END OF EJS Templates
pull requests: blame the right user when an admin adds reviewers to other peoples PRs...
Mads Kiilerich -
r5499:f2485123 stable
parent child Browse files
Show More
@@ -502,9 +502,10 b' class PullrequestsController(BaseRepoCon'
502 pull_request.title = _form['pullrequest_title']
502 pull_request.title = _form['pullrequest_title']
503 pull_request.description = _form['pullrequest_desc'].strip() or _('No description')
503 pull_request.description = _form['pullrequest_desc'].strip() or _('No description')
504 pull_request.owner = User.get_by_username(_form['owner'])
504 pull_request.owner = User.get_by_username(_form['owner'])
505 user = User.get(c.authuser.user_id)
505 try:
506 try:
506 PullRequestModel().mention_from_description(pull_request, old_description)
507 PullRequestModel().mention_from_description(user, pull_request, old_description)
507 PullRequestModel().update_reviewers(pull_request_id, reviewers_ids)
508 PullRequestModel().update_reviewers(user, pull_request_id, reviewers_ids)
508 except UserInvalidException as u:
509 except UserInvalidException as u:
509 h.flash(_('Invalid reviewer "%s" specified') % u, category='error')
510 h.flash(_('Invalid reviewer "%s" specified') % u, category='error')
510 raise HTTPBadRequest()
511 raise HTTPBadRequest()
@@ -100,7 +100,7 b' class ChangesetCommentsModel(BaseModel):'
100 recipients += [cs_author]
100 recipients += [cs_author]
101 email_kwargs = {
101 email_kwargs = {
102 'status_change': status_change,
102 'status_change': status_change,
103 'cs_comment_user': h.person(user, 'full_name_and_username'),
103 'cs_comment_user': user.full_name_and_username,
104 'cs_target_repo': h.canonical_url('summary_home', repo_name=repo.repo_name),
104 'cs_target_repo': h.canonical_url('summary_home', repo_name=repo.repo_name),
105 'cs_comment_url': comment_url,
105 'cs_comment_url': comment_url,
106 'raw_id': revision,
106 'raw_id': revision,
@@ -148,7 +148,7 b' class ChangesetCommentsModel(BaseModel):'
148 'status_change': status_change,
148 'status_change': status_change,
149 'closing_pr': closing_pr,
149 'closing_pr': closing_pr,
150 'pr_comment_url': comment_url,
150 'pr_comment_url': comment_url,
151 'pr_comment_user': h.person(user, 'full_name_and_username'),
151 'pr_comment_user': user.full_name_and_username,
152 'pr_target_repo': h.canonical_url('summary_home',
152 'pr_target_repo': h.canonical_url('summary_home',
153 repo_name=pull_request.other_repo.repo_name),
153 repo_name=pull_request.other_repo.repo_name),
154 'repo_name': pull_request.other_repo.repo_name,
154 'repo_name': pull_request.other_repo.repo_name,
@@ -111,11 +111,11 b' class PullRequestModel(BaseModel):'
111
111
112 mention_recipients = set(User.get_by_username(username, case_insensitive=True)
112 mention_recipients = set(User.get_by_username(username, case_insensitive=True)
113 for username in extract_mentioned_users(new.description))
113 for username in extract_mentioned_users(new.description))
114 self.__add_reviewers(new, reviewers, mention_recipients)
114 self.__add_reviewers(created_by_user, new, reviewers, mention_recipients)
115
115
116 return new
116 return new
117
117
118 def __add_reviewers(self, pr, reviewers, mention_recipients=None):
118 def __add_reviewers(self, user, pr, reviewers, mention_recipients=None):
119 #members
119 #members
120 for member in set(reviewers):
120 for member in set(reviewers):
121 _usr = self._get_user(member)
121 _usr = self._get_user(member)
@@ -135,7 +135,7 b' class PullRequestModel(BaseModel):'
135 subject = safe_unicode(
135 subject = safe_unicode(
136 h.link_to(
136 h.link_to(
137 _('%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s') % \
137 _('%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s') % \
138 {'user': pr.owner.username,
138 {'user': user.username,
139 'pr_title': pr.title,
139 'pr_title': pr.title,
140 'pr_nice_id': pr.nice_id()},
140 'pr_nice_id': pr.nice_id()},
141 pr_url)
141 pr_url)
@@ -144,19 +144,19 b' class PullRequestModel(BaseModel):'
144 _org_ref_type, org_ref_name, _org_rev = pr.org_ref.split(':')
144 _org_ref_type, org_ref_name, _org_rev = pr.org_ref.split(':')
145 email_kwargs = {
145 email_kwargs = {
146 'pr_title': pr.title,
146 'pr_title': pr.title,
147 'pr_user_created': h.person(pr.owner),
147 'pr_user_created': user.full_name_and_username,
148 'pr_repo_url': h.canonical_url('summary_home', repo_name=pr.other_repo.repo_name),
148 'pr_repo_url': h.canonical_url('summary_home', repo_name=pr.other_repo.repo_name),
149 'pr_url': pr_url,
149 'pr_url': pr_url,
150 'pr_revisions': revision_data,
150 'pr_revisions': revision_data,
151 'repo_name': pr.other_repo.repo_name,
151 'repo_name': pr.other_repo.repo_name,
152 'pr_nice_id': pr.nice_id(),
152 'pr_nice_id': pr.nice_id(),
153 'ref': org_ref_name,
153 'ref': org_ref_name,
154 'pr_username': pr.owner.username,
154 'pr_username': user.username,
155 'threading': threading,
155 'threading': threading,
156 'is_mention': False,
156 'is_mention': False,
157 }
157 }
158 if reviewers:
158 if reviewers:
159 NotificationModel().create(created_by=pr.owner, subject=subject, body=body,
159 NotificationModel().create(created_by=user, subject=subject, body=body,
160 recipients=reviewers,
160 recipients=reviewers,
161 type_=Notification.TYPE_PULL_REQUEST,
161 type_=Notification.TYPE_PULL_REQUEST,
162 email_kwargs=email_kwargs)
162 email_kwargs=email_kwargs)
@@ -167,21 +167,21 b' class PullRequestModel(BaseModel):'
167 if mention_recipients:
167 if mention_recipients:
168 email_kwargs['is_mention'] = True
168 email_kwargs['is_mention'] = True
169 subject = _('[Mention]') + ' ' + subject
169 subject = _('[Mention]') + ' ' + subject
170 NotificationModel().create(created_by=pr.owner, subject=subject, body=body,
170 NotificationModel().create(created_by=user, subject=subject, body=body,
171 recipients=mention_recipients,
171 recipients=mention_recipients,
172 type_=Notification.TYPE_PULL_REQUEST,
172 type_=Notification.TYPE_PULL_REQUEST,
173 email_kwargs=email_kwargs)
173 email_kwargs=email_kwargs)
174
174
175 def mention_from_description(self, pr, old_description=''):
175 def mention_from_description(self, user, pr, old_description=''):
176 mention_recipients = set(User.get_by_username(username, case_insensitive=True)
176 mention_recipients = set(User.get_by_username(username, case_insensitive=True)
177 for username in extract_mentioned_users(pr.description))
177 for username in extract_mentioned_users(pr.description))
178 mention_recipients.difference_update(User.get_by_username(username, case_insensitive=True)
178 mention_recipients.difference_update(User.get_by_username(username, case_insensitive=True)
179 for username in extract_mentioned_users(old_description))
179 for username in extract_mentioned_users(old_description))
180
180
181 log.debug("Mentioning %s", mention_recipients)
181 log.debug("Mentioning %s", mention_recipients)
182 self.__add_reviewers(pr, [], mention_recipients)
182 self.__add_reviewers(user, pr, [], mention_recipients)
183
183
184 def update_reviewers(self, pull_request, reviewers_ids):
184 def update_reviewers(self, user, pull_request, reviewers_ids):
185 reviewers_ids = set(reviewers_ids)
185 reviewers_ids = set(reviewers_ids)
186 pull_request = self.__get_pull_request(pull_request)
186 pull_request = self.__get_pull_request(pull_request)
187 current_reviewers = PullRequestReviewers.query()\
187 current_reviewers = PullRequestReviewers.query()\
@@ -194,7 +194,7 b' class PullRequestModel(BaseModel):'
194 to_remove = current_reviewers_ids.difference(reviewers_ids)
194 to_remove = current_reviewers_ids.difference(reviewers_ids)
195
195
196 log.debug("Adding %s reviewers", to_add)
196 log.debug("Adding %s reviewers", to_add)
197 self.__add_reviewers(pull_request, to_add)
197 self.__add_reviewers(user, pull_request, to_add)
198
198
199 log.debug("Removing %s reviewers", to_remove)
199 log.debug("Removing %s reviewers", to_remove)
200 for uid in to_remove:
200 for uid in to_remove:
General Comments 0
You need to be logged in to leave comments. Login now