From c6f63a7594110db75b8e99521b6803cc02b35486 Mon Sep 17 00:00:00 2001 From: Patrick Uiterwijk Date: May 22 2017 20:36:59 +0000 Subject: Taskify PR merge Signed-off-by: Patrick Uiterwijk --- diff --git a/pagure/hooks/files/default_hook.py b/pagure/hooks/files/default_hook.py index 6d563f1..e9f21ab 100755 --- a/pagure/hooks/files/default_hook.py +++ b/pagure/hooks/files/default_hook.py @@ -21,6 +21,7 @@ if 'PAGURE_CONFIG' not in os.environ \ import pagure # noqa: E402 import pagure.exceptions # noqa: E402 import pagure.lib.link # noqa: E402 +import pagure.lib.tasks # noqa: E402 from pagure.lib import REDIS # noqa: E402 @@ -93,15 +94,8 @@ def run_as_post_receive_hook(): print('/!\ Commit notification emails will not be sent and ' 'commits won\'t be logged') - try: - # Reset the merge_status of all opened PR to refresh their cache - pagure.lib.reset_status_pull_request(pagure.SESSION, project) - pagure.SESSION.commit() - except SQLAlchemyError as err: # pragma: no cover - pagure.SESSION.rollback() - print(err) - print('An error occured while running the default hook, please ' - 'report it to an admin.') + # Schedule refresh of all opened PRs + pagure.lib.tasks.refresh_pr_cache.delay(project.name, namespace, username) pagure.SESSION.remove() diff --git a/pagure/lib/git.py b/pagure/lib/git.py index 18d28eb..a695ce1 100644 --- a/pagure/lib/git.py +++ b/pagure/lib/git.py @@ -1413,17 +1413,6 @@ def merge_pull_request( session, request, username, requestfolder=request_folder, ) - try: - # Reset the merge_status of all opened PR to refresh their cache - _log.info(' Clear the cached merged status of the other PRs') - pagure.lib.reset_status_pull_request(session, request.project) - session.commit() - except SQLAlchemyError as err: # pragma: no cover - session.rollback() - pagure.APP.logger.exception(err) - shutil.rmtree(newpath) - raise pagure.exceptions.PagureException( - 'Could not update this pull-request in the database') shutil.rmtree(newpath) return 'Changes merged!' diff --git a/pagure/lib/tasks.py b/pagure/lib/tasks.py index 491e338..7e449d0 100644 --- a/pagure/lib/tasks.py +++ b/pagure/lib/tasks.py @@ -307,3 +307,31 @@ def pull_remote_repo(name, namespace, user, remote_git, branch_from, remote_git, clonepath, checkout_branch=branch_from) session.remove() + + +@conn.task +def refresh_pr_cache(name, namespace, user): + session = pagure.lib.create_session() + + project = pagure.lib._get_project(session, namespace=namespace, + name=name, user=user) + + pagure.lib.reset_status_pull_request(session, project) + + session.remove() + +@conn.task +def merge_pull_request(name, namespace, user, requestid, user_merger): + session = pagure.lib.create_session() + + project = pagure.lib._get_project(session, namespace=namespace, + name=name, user=user, with_lock=True) + request = pagure.lib.search_pull_requests( + session, project_id=project.id, requestid=requestid) + + pagure.lib.git.merge_pull_request( + session, request, user_merger, APP.config['REQUESTS_FOLDER']) + + refresh_pr_cache.delay(name, namespace, user) + session.remove() + return ret('view_repo', repo=name, username=user, namespace=namespace) diff --git a/pagure/ui/fork.py b/pagure/ui/fork.py index 97ead5e..9f3614c 100644 --- a/pagure/ui/fork.py +++ b/pagure/ui/fork.py @@ -724,11 +724,10 @@ def merge_request_pull(repo, requestid, username=None, namespace=None): _log.info('All checks in the controller passed') try: - _log.info('Calling pagure.lib.git.merge_pull_request') - message = pagure.lib.git.merge_pull_request( - SESSION, request, flask.g.fas_user.username, - APP.config['REQUESTS_FOLDER']) - flask.flash(message) + taskid = pagure.lib.tasks.merge_pull_request.delay( + repo.name, namespace, username, requestid, + flask.g.fas_user.username) + return pagure.wait_for_task(taskid) except pygit2.GitError as err: _log.info('GitError exception raised') flask.flash(str(err.message), 'error')