From 32c1ea91237ca1f19ddbc611d5b53c34f34050f6 Mon Sep 17 00:00:00 2001 From: Patrick Uiterwijk Date: May 16 2017 12:18:36 +0000 Subject: Acquire lock in operations changing the git repos Signed-off-by: Patrick Uiterwijk --- diff --git a/pagure/ui/fork.py b/pagure/ui/fork.py index d2559d8..848f05c 100644 --- a/pagure/ui/fork.py +++ b/pagure/ui/fork.py @@ -31,7 +31,8 @@ import pagure.exceptions import pagure.lib import pagure.lib.git import pagure.forms -from pagure import APP, SESSION, login_required, __get_file_in_tree +from pagure import (APP, SESSION, login_required, __get_file_in_tree, + acquire_lock) _log = logging.getLogger(__name__) @@ -171,6 +172,7 @@ def request_pulls(repo, username=None, namespace=None): '/fork////pull-request//') @APP.route( '/fork////pull-request/') +@acquire_lock def request_pull(repo, requestid, username=None, namespace=None): """ Create a pull request with the changes from the fork into the project. """ @@ -258,6 +260,7 @@ def request_pull(repo, requestid, username=None, namespace=None): @APP.route('/fork///pull-request/.patch') @APP.route( '/fork////pull-request/.patch') +@acquire_lock def request_pull_patch(repo, requestid, username=None, namespace=None): """ Returns the commits from the specified pull-request as patches. """ @@ -347,6 +350,7 @@ def request_pull_patch(repo, requestid, username=None, namespace=None): '/fork////pull-request//edit', methods=('GET', 'POST')) @login_required +@acquire_lock def request_pull_edit(repo, requestid, username=None, namespace=None): """ Edit the title of a pull-request. """ @@ -420,6 +424,7 @@ def request_pull_edit(repo, requestid, username=None, namespace=None): '/fork////pull-request//' 'comment///', methods=('GET', 'POST')) @login_required +@acquire_lock def pull_request_add_comment( repo, requestid, commit=None, filename=None, row=None, username=None, namespace=None): @@ -516,6 +521,7 @@ def pull_request_add_comment( '/fork////pull-request//' 'comment/drop', methods=['POST']) @login_required +@acquire_lock def pull_request_drop_comment( repo, requestid, username=None, namespace=None): """ Delete a comment of a pull-request. @@ -589,6 +595,7 @@ def pull_request_drop_comment( '/comment//edit', methods=('GET', 'POST')) @login_required +@acquire_lock def pull_request_edit_comment( repo, requestid, commentid, username=None, namespace=None): """Edit comment of a pull request @@ -684,6 +691,7 @@ def pull_request_edit_comment( '/fork////pull-request//merge', methods=['POST']) @login_required +@acquire_lock def merge_request_pull(repo, requestid, username=None, namespace=None): """ Create a pull request with the changes from the fork into the project. """ @@ -773,6 +781,7 @@ def merge_request_pull(repo, requestid, username=None, namespace=None): '/fork////pull-request/cancel/', methods=['POST']) @login_required +@acquire_lock def cancel_request_pull(repo, requestid, username=None, namespace=None): """ Cancel a pull request. """ @@ -834,6 +843,7 @@ def cancel_request_pull(repo, requestid, username=None, namespace=None): '/fork////pull-request//assign', methods=['POST']) @login_required +@acquire_lock def set_assignee_requests(repo, requestid, username=None, namespace=None): ''' Assign a pull-request. ''' repo = flask.g.repo @@ -960,6 +970,7 @@ def fork_project(repo, username=None, namespace=None): @APP.route( '/fork////diff/' '..', methods=('GET', 'POST')) +@acquire_lock def new_request_pull( repo, branch_to, branch_from, username=None, namespace=None): """ Create a pull request with the changes from the fork into the project. @@ -1112,6 +1123,7 @@ def new_request_pull( '/fork////diff/remote', methods=('GET', 'POST')) @login_required +@acquire_lock def new_remote_request_pull(repo, username=None, namespace=None): """ Create a pull request with the changes from a remote fork into the project. @@ -1257,6 +1269,7 @@ def new_remote_request_pull(repo, username=None, namespace=None): '/fork_edit/fork////edit//' 'f/', methods=['POST']) @login_required +@acquire_lock def fork_edit_file( repo, branchname, filename, username=None, namespace=None): """ Fork the project specified and open the specific file to edit diff --git a/pagure/ui/issues.py b/pagure/ui/issues.py index 32c44fe..868ff38 100644 --- a/pagure/ui/issues.py +++ b/pagure/ui/issues.py @@ -37,7 +37,8 @@ import pagure.lib import pagure.lib.encoding_utils import pagure.forms from pagure import (APP, SESSION, __get_file_in_tree, - login_required, authenticated, urlpattern) + login_required, authenticated, urlpattern, + acquire_lock) _log = logging.getLogger(__name__) @@ -70,6 +71,7 @@ _log = logging.getLogger(__name__) '/fork////issue//update', methods=['GET', 'POST']) @login_required +@acquire_lock def update_issue(repo, issueid, username=None, namespace=None): ''' Add a comment to an issue. ''' is_js = flask.request.args.get('js', False) @@ -385,6 +387,7 @@ def update_issue(repo, issueid, username=None, namespace=None): '/fork////tag//edit', methods=('GET', 'POST')) @login_required +@acquire_lock def edit_tag(repo, tag, username=None, namespace=None): """ Edit the specified tag associated with the issues of a project. """ @@ -454,6 +457,7 @@ def edit_tag(repo, tag, username=None, namespace=None): @APP.route('//update/tags', methods=['POST']) @APP.route('///update/tags', methods=['POST']) @login_required +@acquire_lock def update_tags(repo, username=None, namespace=None): """ Update the tags of a project. """ @@ -547,6 +551,7 @@ def update_tags(repo, username=None, namespace=None): @APP.route('/fork///droptag/', methods=['POST']) @APP.route('/fork////droptag/', methods=['POST']) @login_required +@acquire_lock def remove_tag(repo, username=None, namespace=None): """ Remove the specified tag, associated with the issues, from the project. """ @@ -875,6 +880,7 @@ def view_roadmap(repo, username=None, namespace=None): '/fork////new_issue', methods=('GET', 'POST')) @login_required +@acquire_lock def new_issue(repo, username=None, namespace=None): """ Create a new issue """ @@ -1061,6 +1067,7 @@ def view_issue(repo, issueid, username=None, namespace=None): methods=['POST']) @APP.route('/fork////issue//drop', methods=['POST']) +@acquire_lock def delete_issue(repo, issueid, username=None, namespace=None): """ Delete the specified issue """ @@ -1120,6 +1127,7 @@ def delete_issue(repo, issueid, username=None, namespace=None): @APP.route('/fork////issue//edit', methods=('GET', 'POST')) @login_required +@acquire_lock def edit_issue(repo, issueid, username=None, namespace=None): """ Edit the specified issue """ @@ -1245,6 +1253,7 @@ def edit_issue(repo, issueid, username=None, namespace=None): @APP.route('/fork////issue//upload', methods=['POST']) @login_required +@acquire_lock def upload_issue(repo, issueid, username=None, namespace=None): ''' Upload a file to a ticket. ''' @@ -1394,6 +1403,7 @@ def view_issue_raw_file( @APP.route('/fork////issue//comment' '//edit', methods=('GET', 'POST')) @login_required +@acquire_lock def edit_comment_issue( repo, issueid, commentid, username=None, namespace=None): """Edit comment of an issue @@ -1480,6 +1490,7 @@ def edit_comment_issue( @APP.route( '/fork////issues/reports', methods=['POST']) @login_required +@acquire_lock def save_reports(repo, username=None, namespace=None): """ Marked for watching or Unwatching """ diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index 5e4acd5..1915037 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -51,7 +51,7 @@ import pagure.forms import pagure import pagure.ui.plugins from pagure import (APP, SESSION, __get_file_in_tree, login_required, - admin_session_timedout) + admin_session_timedout, acquire_lock) from pagure.lib import encoding_utils @@ -989,6 +989,7 @@ def new_release(repo, username=None, namespace=None): @APP.route( '/fork////settings', methods=('GET', 'POST')) @login_required +@acquire_lock def view_settings(repo, username=None, namespace=None): """ Presents the settings of the project. """ @@ -1352,6 +1353,7 @@ def update_milestones(repo, username=None, namespace=None): @APP.route( '/fork////default/branch/', methods=['POST']) @login_required +@acquire_lock def change_ref_head(repo, username=None, namespace=None): """ Change HEAD reference """ @@ -1395,6 +1397,7 @@ def change_ref_head(repo, username=None, namespace=None): @APP.route('/fork///delete', methods=['POST']) @APP.route('/fork////delete', methods=['POST']) @login_required +@acquire_lock def delete_repo(repo, username=None, namespace=None): """ Delete the present project. """ @@ -1903,6 +1906,7 @@ def add_group_project(repo, username=None, namespace=None): @APP.route('/fork///regenerate', methods=['POST']) @APP.route('/fork////regenerate', methods=['POST']) @login_required +@acquire_lock def regenerate_git(repo, username=None, namespace=None): """ Regenerate the specified git repo with the content in the project. """ @@ -2095,6 +2099,7 @@ def revoke_api_token(repo, token_id, username=None, namespace=None): '/fork////edit//f/' '', methods=('GET', 'POST')) @login_required +@acquire_lock def edit_file(repo, branchname, filename, username=None, namespace=None): """ Edit a file online. """ @@ -2179,6 +2184,7 @@ def edit_file(repo, branchname, filename, username=None, namespace=None): @APP.route('/fork////b//delete', methods=['POST']) @login_required +@acquire_lock def delete_branch(repo, branchname, username=None, namespace=None): """ Delete the branch of a project. """