From 57859c0532abb05c3b0c53067a50c0f0d615668e Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 30 2020 08:38:59 +0000 Subject: [PATCH 1/4] Add the possibility to set the default branch at project creation Signed-off-by: Pierre-Yves Chibon --- diff --git a/pagure/forms.py b/pagure/forms.py index e29b770..83e6d53 100644 --- a/pagure/forms.py +++ b/pagure/forms.py @@ -206,6 +206,9 @@ class ProjectForm(ProjectFormSimplified): coerce=convert_value, default=pagure_config["REPOSPANNER_NEW_REPO"], ) + default_branch = wtforms.StringField( + "Default branch", [wtforms.validators.optional()], + ) def __init__(self, *args, **kwargs): """ Calls the default constructor with the normal argument but diff --git a/pagure/lib/query.py b/pagure/lib/query.py index f2e0e91..48a72bf 100644 --- a/pagure/lib/query.py +++ b/pagure/lib/query.py @@ -1616,6 +1616,7 @@ def new_project( user_ns=False, ignore_existing_repo=False, private=False, + default_branch=None, ): """ Create a new project based on the information provided. @@ -1712,7 +1713,12 @@ def new_project( ) return pagure.lib.tasks.create_project.delay( - user_obj.username, namespace, name, add_readme, ignore_existing_repo + user_obj.username, + namespace, + name, + add_readme, + ignore_existing_repo, + default_branch, ) diff --git a/pagure/lib/tasks.py b/pagure/lib/tasks.py index 73323ef..b3a6f6d 100644 --- a/pagure/lib/tasks.py +++ b/pagure/lib/tasks.py @@ -213,7 +213,14 @@ def delete_project( @conn.task(queue=pagure_config.get("FAST_CELERY_QUEUE", None), bind=True) @pagure_task def create_project( - self, session, username, namespace, name, add_readme, ignore_existing_repo + self, + session, + username, + namespace, + name, + add_readme, + ignore_existing_repo, + default_branch=None, ): """ Create a project. @@ -231,6 +238,9 @@ def create_project( :kwarg ignore_existing_repo: a boolean specifying whether the creation of the project should fail if the repo exists on disk or not :type ignore_existing_repo: bool + :kwarg default_branch: the name of the default branch to create and set + as default. + :type default_branch: str or None """ project = pagure.lib.query._get_project( @@ -272,12 +282,19 @@ def create_project( session.commit() raise + if default_branch: + path = project.repopath("main") + repo_obj = pygit2.Repository(path) + repo_obj.set_head("refs/heads/%s" % default_branch) + if add_readme: with project.lock("WORKER"): with pagure.lib.git.TemporaryClone( project, "main", "add_readme" ) as tempclone: temp_gitrepo = tempclone.repo + if default_branch: + temp_gitrepo.set_head("refs/heads/%s" % default_branch) # Add README file author = userobj.fullname or userobj.user diff --git a/pagure/templates/new_project.html b/pagure/templates/new_project.html index 6d619e1..bdce2d5 100644 --- a/pagure/templates/new_project.html +++ b/pagure/templates/new_project.html @@ -18,6 +18,7 @@ {{ render_bootstrap_field(form.name, field_description="the name of your project") }} {{ render_bootstrap_field(form.description, field_description="short description of the project") }} {{ render_bootstrap_field(form.namespace, field_description="namespace of the project") }} + {{ render_bootstrap_field(form.default_branch, field_description="Name of the default branch in the git repo") }} {{ render_bootstrap_field(form.url, field_description="url of the project's website") }} {{ render_bootstrap_field(form.avatar_email, field_description="libravatar email address avatar email") }} {% if config.get('PRIVATE_PROJECTS', False) %} diff --git a/pagure/templates/repo_info.html b/pagure/templates/repo_info.html index 75f01e7..15609c6 100644 --- a/pagure/templates/repo_info.html +++ b/pagure/templates/repo_info.html @@ -290,23 +290,24 @@ {% endif %} - {% if g.repo_obj and g.repo_obj.is_empty and repo.mirrored_from %} + {% if g.repo_obj and (g.repo_obj.is_empty or g.repo_obj.head_is_unborn) and repo.mirrored_from %} - {% elif g.repo_obj and g.repo_obj.is_empty %} + {% elif g.repo_obj and (g.repo_obj.is_empty or g.repo_obj.head_is_unborn) %}