From 8e1ee656991ddb5576aad16b415ac9921ad4de72 Mon Sep 17 00:00:00 2001 From: Patrick Uiterwijk Date: May 22 2017 20:36:59 +0000 Subject: Update_git is now async Signed-off-by: Patrick Uiterwijk --- diff --git a/pagure/lib/git.py b/pagure/lib/git.py index 94973a1..77bde16 100644 --- a/pagure/lib/git.py +++ b/pagure/lib/git.py @@ -206,6 +206,26 @@ def _generate_gitolite_acls(): def update_git(obj, repo, repofolder): + """ Schedules an update_repo task after determining arguments. """ + user = None + ticketuid = None + requestuid = None + if obj.isa == 'issue': + ticketuid = obj.uid + elif obj.isa == 'pull-request': + args['requestuid'] = obj.uid + requestuid = obj.uid + else: + raise NotImplementedError('Unknown object type %s' % obj.isa) + + if repo.is_fork: + user = repo.user + + return pagure.lib.tasks.update_git.delay( + repo.name, repo.namespace, user, ticketuid, requestuid) + + +def _update_git(obj, repo, repofolder): """ Update the given issue in its git. This method forks the provided repo, add/edit the issue whose file name @@ -218,8 +238,6 @@ def update_git(obj, repo, repofolder): if not repofolder: return - pagure.ensure_lock(repo) - # Get the fork repopath = os.path.join(repofolder, repo.path) @@ -306,8 +324,6 @@ def clean_git(obj, repo, repofolder): if not repofolder: return - pagure.ensure_lock(repo) - _log.info('Update the git repo: %s to remove: %s', repo.path, obj) # Get the fork @@ -819,8 +835,6 @@ def add_file_to_git(repo, issue, ticketfolder, user, filename, filestream): if not ticketfolder: return - pagure.ensure_lock(repo) - # Prefix the filename with a timestamp: filename = '%s-%s' % ( hashlib.sha256(filestream.read()).hexdigest(), @@ -927,8 +941,6 @@ def update_file_in_git( ''' _log.info('Updating file: %s in the repo: %s', filename, repo.path) - pagure.ensure_lock(repo) - # Get the fork repopath = pagure.get_repo_path(repo) diff --git a/pagure/lib/tasks.py b/pagure/lib/tasks.py index 151e744..5fba456 100644 --- a/pagure/lib/tasks.py +++ b/pagure/lib/tasks.py @@ -133,3 +133,19 @@ def create_project(username, namespace, name, add_readme, ignore_existing_repo): generate_gitolite_acls.delay() return ret('view_repo', repo=name, namespace=namespace) + + +@conn.task +def update_git(name, namespace, user, ticketuid=None, requestuid=None): + project = pagure.lib._get_project(pagure.SESSION, namespace=namespace, + name=name, user=user, with_lock=True) + if ticketuid is not None: + obj = pagure.lib.get_issue_by_uid(pagure.SESSION, ticketuid) + folder = os.path.join(APP.config['TICKETS_FOLDER'], project.path) + elif requestuid is not None: + obj = pagure.lib.get_request_by_uid(pagure.SESSION, requestuid) + folder = os.path.join(APP.config['REQUESTS_FOLDER'], project.path) + else: + raise NotImplementedError('No ticket ID or request ID provided') + + return pagure.lib.git._update_git(obj, project, folder)