diff options
author | Marcin Kuzminski <marcin@python-works.com> | 2012-07-30 23:29:03 +0200 |
---|---|---|
committer | Marcin Kuzminski <marcin@python-works.com> | 2012-07-30 23:29:03 +0200 |
commit | 65e47700670acb8c63243f3848d0483049f61752 (patch) | |
tree | 8a8da6e31e4af57019c2cd33909ae6512bedb6e8 /rhodecode/controllers/changeset.py | |
parent | 32f6df90ad29f33800ebbffa311cd9085f1373b3 (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.py | 32 |
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() |