aboutsummaryrefslogtreecommitdiff
path: root/rhodecode/controllers/changeset.py
diff options
context:
space:
mode:
authorMarcin Kuzminski <marcin@python-works.com>2012-07-30 23:29:03 +0200
committerMarcin Kuzminski <marcin@python-works.com>2012-07-30 23:29:03 +0200
commit65e47700670acb8c63243f3848d0483049f61752 (patch)
tree8a8da6e31e4af57019c2cd33909ae6512bedb6e8 /rhodecode/controllers/changeset.py
parent32f6df90ad29f33800ebbffa311cd9085f1373b3 (diff)
Forbid changing changset status when it is associated with a closed pull request
- fixed some issues with cascade deleting repos with changeset statuses attached --HG-- branch : beta
Diffstat (limited to 'rhodecode/controllers/changeset.py')
-rw-r--r--rhodecode/controllers/changeset.py32
1 files changed, 23 insertions, 9 deletions
diff --git a/rhodecode/controllers/changeset.py b/rhodecode/controllers/changeset.py
index c85173d1..e39739b8 100644
--- a/rhodecode/controllers/changeset.py
+++ b/rhodecode/controllers/changeset.py
@@ -49,6 +49,7 @@ from rhodecode.model.changeset_status import ChangesetStatusModel
from rhodecode.model.meta import Session
from rhodecode.lib.diffs import wrapped_diff
from rhodecode.model.repo import RepoModel
+from rhodecode.lib.exceptions import StatusChangeOnClosedPullRequestError
log = logging.getLogger(__name__)
@@ -388,18 +389,31 @@ class ChangesetController(BaseRepoController):
# get status if set !
if status and change_status:
- ChangesetStatusModel().set_status(
- c.rhodecode_db_repo.repo_id,
- status,
- c.rhodecode_user.user_id,
- comm,
- revision=revision,
- )
+ # if latest status was from pull request and it's closed
+ # disallow changing status !
+ # dont_allow_on_closed_pull_request = True !
+
+ try:
+ ChangesetStatusModel().set_status(
+ c.rhodecode_db_repo.repo_id,
+ status,
+ c.rhodecode_user.user_id,
+ comm,
+ revision=revision,
+ dont_allow_on_closed_pull_request=True
+ )
+ except StatusChangeOnClosedPullRequestError:
+ log.error(traceback.format_exc())
+ msg = _('Changing status on a changeset associated with'
+ 'a closed pull request is not allowed')
+ h.flash(msg, category='warning')
+ return redirect(h.url('changeset_home', repo_name=repo_name,
+ revision=revision))
action_logger(self.rhodecode_user,
'user_commented_revision:%s' % revision,
c.rhodecode_db_repo, self.ip_addr, self.sa)
- Session.commit()
+ Session().commit()
if not request.environ.get('HTTP_X_PARTIAL_XHR'):
return redirect(h.url('changeset_home', repo_name=repo_name,
@@ -422,7 +436,7 @@ class ChangesetController(BaseRepoController):
owner = lambda: co.author.user_id == c.rhodecode_user.user_id
if h.HasPermissionAny('hg.admin', 'repository.admin')() or owner:
ChangesetCommentsModel().delete(comment=co)
- Session.commit()
+ Session().commit()
return True
else:
raise HTTPForbidden()