[PATCH 06 of 14] controllers: forward pullrequests.delete_comment to changeset

Thomas De Schampheleire patrickdepinguin at gmail.com
Tue Nov 20 20:32:17 UTC 2018


# HG changeset patch
# User Thomas De Schampheleire <thomas.de_schampheleire at nokia.com>
# Date 1541709517 -3600
#      Thu Nov 08 21:38:37 2018 +0100
# Node ID 7350230aa3578c3fc3a4aff864e35a02eea216e1
# Parent  57b9fe6c7871e1ee74eca9c6723ccc4a9dfd5c77
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.

diff --git a/kallithea/controllers/changeset.py b/kallithea/controllers/changeset.py
--- a/kallithea/controllers/changeset.py
+++ b/kallithea/controllers/changeset.py
@@ -187,6 +187,22 @@ def create_comment(text, status, f_path,
 
     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 @@ class ChangesetController(BaseRepoContro
     @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')
diff --git a/kallithea/controllers/pullrequests.py b/kallithea/controllers/pullrequests.py
--- a/kallithea/controllers/pullrequests.py
+++ b/kallithea/controllers/pullrequests.py
@@ -43,7 +43,7 @@ from kallithea.lib.utils import action_l
 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.changeset_status im
 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 @@ class PullrequestsController(BaseRepoCon
     @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)


More information about the kallithea-general mailing list