changeset 7425:c6207df9841f

controllers: forward pullrequests.delete_comment to changeset Remove duplication between pullrequests and changeset. We move the code outside ChangesetController to make it callable from PullrequestsController. Note: - instead of keeping the method pullrequests.delete_comment itself and letting it forward to changeset.delete_comment, an alternative solution would have been to change the routing table directly. However, the chosen solution makes it more explicit which operations are supported on each controller.
author Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
date Thu, 08 Nov 2018 21:38:37 +0100
parents 0ac1aaccd19c
children b58113063bb2
files kallithea/controllers/changeset.py kallithea/controllers/pullrequests.py
diffstat 2 files changed, 21 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/controllers/changeset.py	Fri Oct 19 22:02:55 2018 +0200
+++ b/kallithea/controllers/changeset.py	Thu Nov 08 21:38:37 2018 +0100
@@ -187,6 +187,22 @@
 
     return comment
 
+def delete_cs_pr_comment(repo_name, comment_id, pr_comment=False):
+    co = ChangesetComment.get_or_404(comment_id)
+    if co.repo.repo_name != repo_name:
+        raise HTTPNotFound()
+    if pr_comment and co.pull_request.is_closed():
+        # don't allow deleting comments on closed pull request
+        raise HTTPForbidden()
+
+    owner = co.author_id == request.authuser.user_id
+    repo_admin = h.HasRepoPermissionLevel('admin')(repo_name)
+    if h.HasPermissionAny('hg.admin')() or repo_admin or owner:
+        ChangesetCommentsModel().delete(comment=co)
+        Session().commit()
+        return True
+    else:
+        raise HTTPForbidden()
 
 class ChangesetController(BaseRepoController):
 
@@ -399,22 +415,8 @@
     @LoginRequired()
     @HasRepoPermissionLevelDecorator('read')
     @jsonify
-    def delete_comment(self, repo_name, comment_id, pr_comment=False):
-        co = ChangesetComment.get_or_404(comment_id)
-        if co.repo.repo_name != repo_name:
-            raise HTTPNotFound()
-        if pr_comment and co.pull_request.is_closed():
-            # don't allow deleting comments on closed pull request
-            raise HTTPForbidden()
-
-        owner = co.author_id == request.authuser.user_id
-        repo_admin = h.HasRepoPermissionLevel('admin')(repo_name)
-        if h.HasPermissionAny('hg.admin')() or repo_admin or owner:
-            ChangesetCommentsModel().delete(comment=co)
-            Session().commit()
-            return True
-        else:
-            raise HTTPForbidden()
+    def delete_comment(self, repo_name, comment_id):
+        return delete_cs_pr_comment(repo_name, comment_id, pr_comment=False)
 
     @LoginRequired(allow_default_user=True)
     @HasRepoPermissionLevelDecorator('read')
--- a/kallithea/controllers/pullrequests.py	Fri Oct 19 22:02:55 2018 +0200
+++ b/kallithea/controllers/pullrequests.py	Thu Nov 08 21:38:37 2018 +0100
@@ -43,7 +43,7 @@
 from kallithea.lib.vcs.exceptions import EmptyRepositoryError, ChangesetDoesNotExistError
 from kallithea.lib.vcs.utils import safe_str
 from kallithea.lib.vcs.utils.hgcompat import unionrepo
-from kallithea.model.db import PullRequest, ChangesetStatus, ChangesetComment, \
+from kallithea.model.db import PullRequest, ChangesetStatus, \
     PullRequestReviewer, Repository, User
 from kallithea.model.pull_request import CreatePullRequestAction, CreatePullRequestIterationAction, PullRequestModel
 from kallithea.model.meta import Session
@@ -53,7 +53,7 @@
 from kallithea.model.forms import PullRequestForm, PullRequestPostForm
 from kallithea.lib.utils2 import safe_int
 from kallithea.controllers.changeset import _ignorews_url, _context_url, \
-    create_comment
+    create_comment, delete_cs_pr_comment
 from kallithea.controllers.compare import CompareController
 from kallithea.lib.graphmod import graph_data
 
@@ -716,18 +716,4 @@
     @HasRepoPermissionLevelDecorator('read')
     @jsonify
     def delete_comment(self, repo_name, comment_id):
-        co = ChangesetComment.get_or_404(comment_id)
-        if co.repo.repo_name != repo_name:
-            raise HTTPNotFound()
-        if co.pull_request.is_closed():
-            # don't allow deleting comments on closed pull request
-            raise HTTPForbidden()
-
-        owner = co.author_id == request.authuser.user_id
-        repo_admin = h.HasRepoPermissionLevel('admin')(repo_name)
-        if h.HasPermissionAny('hg.admin')() or repo_admin or owner:
-            ChangesetCommentsModel().delete(comment=co)
-            Session().commit()
-            return True
-        else:
-            raise HTTPForbidden()
+        return delete_cs_pr_comment(repo_name, comment_id, pr_comment=True)