diff --git a/rhodecode/config/routing.py b/rhodecode/config/routing.py --- a/rhodecode/config/routing.py +++ b/rhodecode/config/routing.py @@ -462,6 +462,11 @@ def make_map(config): controller='pullrequests', action='update', conditions=dict(function=check_repo, method=["PUT"])) + rmap.connect('pullrequest_delete', + '/{repo_name:.*?}/pull-request/{pull_request_id}', + controller='pullrequests', + action='delete', conditions=dict(function=check_repo, + method=["DELETE"])) rmap.connect('pullrequest_show_all', '/{repo_name:.*?}/pull-request', diff --git a/rhodecode/controllers/pullrequests.py b/rhodecode/controllers/pullrequests.py --- a/rhodecode/controllers/pullrequests.py +++ b/rhodecode/controllers/pullrequests.py @@ -203,6 +203,20 @@ class PullrequestsController(BaseRepoCon Session.commit() return True + @NotAnonymous() + @jsonify + def delete(self, repo_name, pull_request_id): + pull_request = PullRequest.get_or_404(pull_request_id) + #only owner can delete it ! + if pull_request.author.user_id == c.rhodecode_user.user_id: + PullRequestModel().delete(pull_request) + Session().commit() + h.flash(_('Successfully deleted pull request'), + category='success') + return redirect(url('admin_settings_my_account')) + else: + raise HTTPForbidden() + def _load_compare_data(self, pull_request, enable_comments=True): """ Load context data needed for generating compare diff diff --git a/rhodecode/model/pull_request.py b/rhodecode/model/pull_request.py --- a/rhodecode/model/pull_request.py +++ b/rhodecode/model/pull_request.py @@ -125,6 +125,10 @@ class PullRequestModel(BaseModel): if reviewer: self.sa.delete(reviewer) + def delete(self, pull_request): + pull_request = self.__get_pull_request(pull_request) + Session().delete(pull_request) + def close_pull_request(self, pull_request): pull_request = self.__get_pull_request(pull_request) pull_request.status = PullRequest.STATUS_CLOSED diff --git a/rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html b/rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html --- a/rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html +++ b/rhodecode/templates/admin/users/user_edit_my_account_pullrequests.html @@ -4,9 +4,16 @@ %if c.my_pull_requests: %for pull_request in c.my_pull_requests:
  • +
    ${_('Pull request #%s opened on %s') % (pull_request.pull_request_id, h.fmt_date(pull_request.created_on))} +
    +
    + ${h.form(url('pullrequest_delete', repo_name=pull_request.other_repo.repo_name, pull_request_id=pull_request.pull_request_id),method='delete')} + ${h.submit('remove_%s' % pull_request.pull_request_id,'',class_="delete_icon action_button",onclick="return confirm('"+_('Confirm to delete this pull request')+"');")} + ${h.end_form()} +
  • %endfor %else: @@ -14,7 +21,7 @@ %endif -
    ${_('I participate in')}
    +
    ${_('I participate in')}