[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