changeset 5499:f24851239566 stable

pull requests: blame the right user when an admin adds reviewers to other peoples PRs Don't send notifications from the PR owner.
author Mads Kiilerich <madski@unity3d.com>
date Mon, 14 Sep 2015 23:06:09 +0200
parents e81498114bc8
children e5078f5b46a7
files kallithea/controllers/pullrequests.py kallithea/model/comment.py kallithea/model/pull_request.py
diffstat 3 files changed, 16 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/controllers/pullrequests.py	Mon Sep 14 23:06:00 2015 +0200
+++ b/kallithea/controllers/pullrequests.py	Mon Sep 14 23:06:09 2015 +0200
@@ -502,9 +502,10 @@
         pull_request.title = _form['pullrequest_title']
         pull_request.description = _form['pullrequest_desc'].strip() or _('No description')
         pull_request.owner = User.get_by_username(_form['owner'])
+        user = User.get(c.authuser.user_id)
         try:
-            PullRequestModel().mention_from_description(pull_request, old_description)
-            PullRequestModel().update_reviewers(pull_request_id, reviewers_ids)
+            PullRequestModel().mention_from_description(user, pull_request, old_description)
+            PullRequestModel().update_reviewers(user, pull_request_id, reviewers_ids)
         except UserInvalidException as u:
             h.flash(_('Invalid reviewer "%s" specified') % u, category='error')
             raise HTTPBadRequest()
--- a/kallithea/model/comment.py	Mon Sep 14 23:06:00 2015 +0200
+++ b/kallithea/model/comment.py	Mon Sep 14 23:06:09 2015 +0200
@@ -100,7 +100,7 @@
             recipients += [cs_author]
             email_kwargs = {
                 'status_change': status_change,
-                'cs_comment_user': h.person(user, 'full_name_and_username'),
+                'cs_comment_user': user.full_name_and_username,
                 'cs_target_repo': h.canonical_url('summary_home', repo_name=repo.repo_name),
                 'cs_comment_url': comment_url,
                 'raw_id': revision,
@@ -148,7 +148,7 @@
                 'status_change': status_change,
                 'closing_pr': closing_pr,
                 'pr_comment_url': comment_url,
-                'pr_comment_user': h.person(user, 'full_name_and_username'),
+                'pr_comment_user': user.full_name_and_username,
                 'pr_target_repo': h.canonical_url('summary_home',
                                    repo_name=pull_request.other_repo.repo_name),
                 'repo_name': pull_request.other_repo.repo_name,
--- a/kallithea/model/pull_request.py	Mon Sep 14 23:06:00 2015 +0200
+++ b/kallithea/model/pull_request.py	Mon Sep 14 23:06:09 2015 +0200
@@ -111,11 +111,11 @@
 
         mention_recipients = set(User.get_by_username(username, case_insensitive=True)
                                  for username in extract_mentioned_users(new.description))
-        self.__add_reviewers(new, reviewers, mention_recipients)
+        self.__add_reviewers(created_by_user, new, reviewers, mention_recipients)
 
         return new
 
-    def __add_reviewers(self, pr, reviewers, mention_recipients=None):
+    def __add_reviewers(self, user, pr, reviewers, mention_recipients=None):
         #members
         for member in set(reviewers):
             _usr = self._get_user(member)
@@ -135,7 +135,7 @@
         subject = safe_unicode(
             h.link_to(
               _('%(user)s wants you to review pull request %(pr_nice_id)s: %(pr_title)s') % \
-                {'user': pr.owner.username,
+                {'user': user.username,
                  'pr_title': pr.title,
                  'pr_nice_id': pr.nice_id()},
                 pr_url)
@@ -144,19 +144,19 @@
         _org_ref_type, org_ref_name, _org_rev = pr.org_ref.split(':')
         email_kwargs = {
             'pr_title': pr.title,
-            'pr_user_created': h.person(pr.owner),
+            'pr_user_created': user.full_name_and_username,
             'pr_repo_url': h.canonical_url('summary_home', repo_name=pr.other_repo.repo_name),
             'pr_url': pr_url,
             'pr_revisions': revision_data,
             'repo_name': pr.other_repo.repo_name,
             'pr_nice_id': pr.nice_id(),
             'ref': org_ref_name,
-            'pr_username': pr.owner.username,
+            'pr_username': user.username,
             'threading': threading,
             'is_mention': False,
             }
         if reviewers:
-            NotificationModel().create(created_by=pr.owner, subject=subject, body=body,
+            NotificationModel().create(created_by=user, subject=subject, body=body,
                                        recipients=reviewers,
                                        type_=Notification.TYPE_PULL_REQUEST,
                                        email_kwargs=email_kwargs)
@@ -167,21 +167,21 @@
         if mention_recipients:
             email_kwargs['is_mention'] = True
             subject = _('[Mention]') + ' ' + subject
-            NotificationModel().create(created_by=pr.owner, subject=subject, body=body,
+            NotificationModel().create(created_by=user, subject=subject, body=body,
                                        recipients=mention_recipients,
                                        type_=Notification.TYPE_PULL_REQUEST,
                                        email_kwargs=email_kwargs)
 
-    def mention_from_description(self, pr, old_description=''):
+    def mention_from_description(self, user, pr, old_description=''):
         mention_recipients = set(User.get_by_username(username, case_insensitive=True)
                                  for username in extract_mentioned_users(pr.description))
         mention_recipients.difference_update(User.get_by_username(username, case_insensitive=True)
                                              for username in extract_mentioned_users(old_description))
 
         log.debug("Mentioning %s", mention_recipients)
-        self.__add_reviewers(pr, [], mention_recipients)
+        self.__add_reviewers(user, pr, [], mention_recipients)
 
-    def update_reviewers(self, pull_request, reviewers_ids):
+    def update_reviewers(self, user, pull_request, reviewers_ids):
         reviewers_ids = set(reviewers_ids)
         pull_request = self.__get_pull_request(pull_request)
         current_reviewers = PullRequestReviewers.query()\
@@ -194,7 +194,7 @@
         to_remove = current_reviewers_ids.difference(reviewers_ids)
 
         log.debug("Adding %s reviewers", to_add)
-        self.__add_reviewers(pull_request, to_add)
+        self.__add_reviewers(user, pull_request, to_add)
 
         log.debug("Removing %s reviewers", to_remove)
         for uid in to_remove: