diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index 345520d..92b438d 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -1743,7 +1743,8 @@ def update_user_settings(session, settings, user): def fork_project(session, user, repo, gitfolder, - docfolder, ticketfolder, requestfolder): + docfolder, ticketfolder, requestfolder, + editbranch=None, editfile=None): ''' Fork a given project into the user's forks. ''' reponame = os.path.join(gitfolder, repo.path) forkreponame = '%s.git' % os.path.join( @@ -1781,7 +1782,9 @@ def fork_project(session, user, repo, gitfolder, return tasks.fork.delay(repo.name, repo.namespace, repo.user if repo.is_fork else None, - user).id + user, + editbranch, + editfile).id def search_projects( diff --git a/pagure/lib/tasks.py b/pagure/lib/tasks.py index 243308b..63b97ef 100644 --- a/pagure/lib/tasks.py +++ b/pagure/lib/tasks.py @@ -214,7 +214,7 @@ def delete_branch(name, namespace, user, branchname): @conn.task -def fork(name, namespace, user_owner, user_forker): +def fork(name, namespace, user_owner, user_forker, editbranch, editfile): session = pagure.lib.create_session() repo_from = pagure.lib._get_project(session, namespace=namespace, @@ -229,11 +229,11 @@ def fork(name, namespace, user_owner, user_forker): # Clone all the branches as well for branch in frepo.listall_branches(pygit2.GIT_BRANCH_REMOTE): branch_obj = frepo.lookup_branch(branch, pygit2.GIT_BRANCH_REMOTE) - name = branch_obj.branch_name.replace( + branchname = branch_obj.branch_name.replace( branch_obj.remote_name, '', 1)[1:] - if name in frepo.listall_branches(pygit2.GIT_BRANCH_LOCAL): + if branchname in frepo.listall_branches(pygit2.GIT_BRANCH_LOCAL): continue - frepo.create_branch(name, frepo.get(branch_obj.target.hex)) + frepo.create_branch(branchname, frepo.get(branch_obj.target.hex)) # Create the git-daemon-export-ok file on the clone http_clone_file = os.path.join(forkreponame, 'git-daemon-export-ok') @@ -283,5 +283,11 @@ def fork(name, namespace, user_owner, user_forker): session.remove() generate_gitolite_acls.delay() - return ret('view_repo', repo=name, namespace=namespace, - username=user_forker) + + if editfile is None: + return ret('view_repo', repo=name, namespace=namespace, + username=user_forker) + else: + return ret('edit_file', repo=name, namespace=namespace, + username=user_forker, branchname=editbranch, + filename=editfile) diff --git a/pagure/ui/fork.py b/pagure/ui/fork.py index 4338cbd..811ff0c 100644 --- a/pagure/ui/fork.py +++ b/pagure/ui/fork.py @@ -1238,26 +1238,20 @@ def fork_edit_file( )) try: - message = pagure.lib.fork_project( + taskid = pagure.lib.fork_project( session=SESSION, repo=repo, gitfolder=APP.config['GIT_FOLDER'], docfolder=APP.config['DOCS_FOLDER'], ticketfolder=APP.config['TICKETS_FOLDER'], requestfolder=APP.config['REQUESTS_FOLDER'], - user=flask.g.fas_user.username) + user=flask.g.fas_user.username, + editbranch=branchname, + editfile=filename) SESSION.commit() - pagure.lib.git.generate_gitolite_acls() - flask.flash(message) return flask.redirect(flask.url_for( - 'edit_file', - username=flask.g.fas_user.username, - namespace=repo.namespace, - repo=repo.name, - branchname=branchname, - filename=filename - )) + 'wait_task', taskid=taskid)) except pagure.exceptions.PagureException as err: flask.flash(str(err), 'error') except SQLAlchemyError as err: # pragma: no cover