diff --git a/pagure/api/fork.py b/pagure/api/fork.py index ae123a3..350b8f5 100644 --- a/pagure/api/fork.py +++ b/pagure/api/fork.py @@ -49,6 +49,55 @@ def api_pull_request_view(repo, requestid, username=None): return jsonout +@API.route('//pull-request//close', methods=['POST']) +@API.route('/fork///pull-request//close', + methods=['POST']) +@api_login_required(acls=['pull_request_close']) +@api_method +def api_pull_request_close(repo, issueid, username=None): + """ Close a pull-request without merging it + """ + repo = pagure.lib.get_project(SESSION, repo, user=username) + httpcode = 200 + output = {} + + repo = pagure.lib.get_project(SESSION, repo, user=username) + + if repo is None: + raise pagure.exceptions.APIError(404, error_code=1) + + if not repo.settings.get('pull_requests', True): + raise pagure.exceptions.APIError(404, error_code=8) + + if repo != flask.g.token.project: + raise pagure.exceptions.APIError(401, error_code=5) + + request = pagure.lib.search_pull_requests( + SESSION, project_id=repo.id, requestid=requestid) + + if not request: + raise pagure.exceptions.APIError(404, error_code=9) + + if not is_repo_admin(repo): + raise pagure.exceptions.APIError(403, error_code=10) + + pagure.lib.close_pull_request( + SESSION, request, flask.g.fas_user.username, + requestfolder=APP.config['REQUESTS_FOLDER'], + merged=False) + try: + SESSION.commit() + output['message'] = 'Request pull canceled!' + except SQLAlchemyError as err: # pragma: no cover + SESSION.rollback() + APP.logger.exception(err) + raise pagure.exceptions.APIError(400, error_code=3) + + jsonout = flask.jsonify(output) + jsonout.status_code = httpcode + return jsonout + + @API.route('//pull-request//comment', methods=['POST']) @API.route('/fork///pull-request//comment',