From 2e375527263c58fe44d19e166a7287e706b4f1dc Mon Sep 17 00:00:00 2001 From: Ghost-script Date: Aug 07 2015 17:15:44 +0000 Subject: [PATCH 1/5] Fixed merge Conflicts --- diff --git a/pagure/forms.py b/pagure/forms.py index d37b9ad..22a36e6 100644 --- a/pagure/forms.py +++ b/pagure/forms.py @@ -343,3 +343,23 @@ class EditFileForm(wtf.Form): self.email.choices = [ (email.email, email.email) for email in kwargs['emails'] ] + +class DefaultBranchForm(wtf.Form): + """Form to change the default branh for a repository""" + branches = wtforms.SelectField( + 'deafult_branch', + [wtforms.validators.Required()], + choices=[(item, item) for item in []] + ) + + def __init__(self, *args, **kwargs): + """ Calls the default constructor with the normal argument but + uses the list of collection provided to fill the choices of the + drop-down list. + """ + super(DefaultBranchForm, self).__init__(*args, **kwargs) + if 'branches' in kwargs: + self.branches.choices = [ + (branch, branch) for branch in kwargs['branches'] + ] + diff --git a/pagure/templates/repo_master.html b/pagure/templates/repo_master.html index a60eccf..3a92348 100644 --- a/pagure/templates/repo_master.html +++ b/pagure/templates/repo_master.html @@ -10,7 +10,7 @@ {{ repo.fullname }} - {% if branchname %} ({{ branchname }}) {% endif %} + {% if branchname %} ({{ branchname }}) {% else %} ({{ 'None' }}) {% endif %} {% if repo.description %}{{ repo.description | markdown |safe }}{% else %}-{% endif -%} diff --git a/pagure/templates/settings.html b/pagure/templates/settings.html index bd76897..05517eb 100644 --- a/pagure/templates/settings.html +++ b/pagure/templates/settings.html @@ -58,7 +58,16 @@ {{ form.csrf_token }} +
+

Default Branch

+
+ {{ branches_form.csrf_token }} + {{ branches_form.branches }} + +

Private web-hook key

diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index ce45096..eab51c1 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -75,6 +75,7 @@ def view_repo(repo, username=None): readme = None safe = False + branchname = repo_obj.head.shorthand if not repo_obj.is_empty else None for i in tree: name, ext = os.path.splitext(i.name) if name == 'README': @@ -83,7 +84,7 @@ def view_repo(repo, username=None): content, ext, view_file_url=flask.url_for( 'view_raw_file', username=username, - repo=repo.name, identifier='master', filename='')) + repo=repo.name, identifier=branchname, filename='')) diff_commits = [] if repo.is_fork: @@ -127,7 +128,7 @@ def view_repo(repo, username=None): readme=readme, safe=safe, branches=sorted(repo_obj.listall_branches()), - branchname='master', + branchname=branchname, last_commits=last_commits, tree=tree, diff_commits=diff_commits, @@ -718,7 +719,6 @@ def view_settings(repo, username=None): flask.url_for('auth_login', next=flask.request.url)) repo = pagure.lib.get_project(SESSION, repo, user=username) - if not repo: flask.abort(404, 'Project not found') @@ -727,14 +727,18 @@ def view_settings(repo, username=None): flask.abort( 403, 'You are not allowed to change the settings for this project') + reponame = pagure.get_repo_path(repo) + repo_obj = pygit2.Repository(reponame) plugins = pagure.ui.plugins.get_plugin_names( APP.config.get('DISABLED_PLUGINS')) tags = pagure.lib.get_tags_of_project(SESSION, repo) + form = pagure.forms.ConfirmationForm() tag_form = pagure.forms.AddIssueTagForm() - + branches = repo_obj.listall_branches() + branches_form = pagure.forms.DefaultBranchForm(branches=branches) if form.validate_on_submit(): settings = {} for key in flask.request.form: @@ -759,7 +763,7 @@ def view_settings(repo, username=None): except SQLAlchemyError, err: # pragma: no cover SESSION.rollback() flask.flash(str(err), 'error') - + branchname = repo_obj.head.shorthand if not repo_obj.is_empty else None return flask.render_template( 'settings.html', select='settings', @@ -767,9 +771,11 @@ def view_settings(repo, username=None): repo=repo, form=form, tag_form=tag_form, + branches_form=branches_form, tags=tags, plugins=plugins, repo_admin=repo_admin, + branchname = branchname, ) @@ -820,6 +826,42 @@ def update_project(repo, username=None): 'view_settings', username=username, repo=repo.name)) +@APP.route('//default/branch/', methods=['POST']) +@APP.route('/fork///default/branch/', methods=['POST']) +@cla_required +def change_ref_head(repo, username=None): + """ Change HEAD reference + """ + + if admin_session_timedout(): + flask.flash('Action canceled, try it again', 'error') + url = flask.url_for( + 'view_settings', username=username, repo=repo) + return flask.redirect( + flask.url_for('auth_login', next=url)) + + repo = pagure.lib.get_project(SESSION, repo, user=username) + if not repo: + flask.abort(404, 'Project not found') + + if not is_repo_admin(repo): + flask.abort( + 403, + 'You are not allowed to change the settings for this project') + repopath = pagure.get_repo_path(repo) + repo_obj = pygit2.Repository(repopath) + branchname = flask.request.form['branches'] + try: + reference = repo_obj.lookup_reference('refs/heads/%s'%branchname).resolve() + repo_obj.set_head(reference.name) + except Exception as err: + APP.logger.exception(err) + + return flask.redirect(flask.url_for( + 'view_settings', username=username, repo=repo.name)) + + + @APP.route('//delete', methods=['POST']) @APP.route('/fork///delete', methods=['POST']) @cla_required From 2e9b64ef63cf394cf8290b46e23434b583c8b6d0 Mon Sep 17 00:00:00 2001 From: Ghost-script Date: Aug 07 2015 17:15:44 +0000 Subject: [PATCH 2/5] Fix for #106 Allow setting the default branch -Added default branch form -Added change_ref_head function to set default branch -Modified template to show the default branch https://pagure.io/pagure/issue/106 --- diff --git a/pagure/forms.py b/pagure/forms.py index 22a36e6..b380bb0 100644 --- a/pagure/forms.py +++ b/pagure/forms.py @@ -347,7 +347,7 @@ class EditFileForm(wtf.Form): class DefaultBranchForm(wtf.Form): """Form to change the default branh for a repository""" branches = wtforms.SelectField( - 'deafult_branch', + 'default_branch', [wtforms.validators.Required()], choices=[(item, item) for item in []] ) diff --git a/pagure/templates/repo_master.html b/pagure/templates/repo_master.html index 3a92348..a60eccf 100644 --- a/pagure/templates/repo_master.html +++ b/pagure/templates/repo_master.html @@ -10,7 +10,7 @@ {{ repo.fullname }} - {% if branchname %} ({{ branchname }}) {% else %} ({{ 'None' }}) {% endif %} + {% if branchname %} ({{ branchname }}) {% endif %} {% if repo.description %}{{ repo.description | markdown |safe }}{% else %}-{% endif -%} diff --git a/pagure/templates/settings.html b/pagure/templates/settings.html index 05517eb..64c5339 100644 --- a/pagure/templates/settings.html +++ b/pagure/templates/settings.html @@ -62,11 +62,11 @@

Default Branch

+ username=username, repo=repo.name) }}" method="post"> {{ branches_form.csrf_token }} {{ branches_form.branches }} +

Private web-hook key

diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index eab51c1..3ba3292 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -75,7 +75,11 @@ def view_repo(repo, username=None): readme = None safe = False - branchname = repo_obj.head.shorthand if not repo_obj.is_empty else None + + if not repo_obj.is_empty and not repo_obj.head_is_unborn: + branchname = repo_obj.head.shorthand + else: + branchname = None for i in tree: name, ext = os.path.splitext(i.name) if name == 'README': @@ -719,6 +723,7 @@ def view_settings(repo, username=None): flask.url_for('auth_login', next=flask.request.url)) repo = pagure.lib.get_project(SESSION, repo, user=username) + if not repo: flask.abort(404, 'Project not found') @@ -734,9 +739,9 @@ def view_settings(repo, username=None): APP.config.get('DISABLED_PLUGINS')) tags = pagure.lib.get_tags_of_project(SESSION, repo) - form = pagure.forms.ConfirmationForm() tag_form = pagure.forms.AddIssueTagForm() + branches = repo_obj.listall_branches() branches_form = pagure.forms.DefaultBranchForm(branches=branches) if form.validate_on_submit(): @@ -763,7 +768,11 @@ def view_settings(repo, username=None): except SQLAlchemyError, err: # pragma: no cover SESSION.rollback() flask.flash(str(err), 'error') - branchname = repo_obj.head.shorthand if not repo_obj.is_empty else None + + if not repo_obj.is_empty and not repo_obj.head_is_unborn: + branchname = repo_obj.head.shorthand + else: + branchname = None return flask.render_template( 'settings.html', select='settings', @@ -850,13 +859,18 @@ def change_ref_head(repo, username=None): 'You are not allowed to change the settings for this project') repopath = pagure.get_repo_path(repo) repo_obj = pygit2.Repository(repopath) - branchname = flask.request.form['branches'] - try: - reference = repo_obj.lookup_reference('refs/heads/%s'%branchname).resolve() - repo_obj.set_head(reference.name) - except Exception as err: - APP.logger.exception(err) + branches = repo_obj.listall_branches() + form = pagure.forms.DefaultBranchForm(branches=branches) + if form.validate_on_submit(): + branchname = form.branches.data + try: + reference = repo_obj.lookup_reference('refs/heads/%s'%branchname).resolve() + repo_obj.set_head(reference.name) + flask.flash('Default branch updated to %s'%branchname) + except Exception as err: + APP.logger.exception(err) + return flask.redirect(flask.url_for( 'view_settings', username=username, repo=repo.name)) From 7f5cad5717c8f34af32615c66d6e8ecffe14a511 Mon Sep 17 00:00:00 2001 From: Ghost-script Date: Aug 07 2015 17:15:44 +0000 Subject: [PATCH 3/5] Added tests for #106 Allow setting the default branch -Added tests for change_ref_head -Modified other tests to create git repo https://pagure.io/pagure/issue/106 --- diff --git a/tests/test_progit_flask_ui_issues.py b/tests/test_progit_flask_ui_issues.py index 663adb3..e138dff 100644 --- a/tests/test_progit_flask_ui_issues.py +++ b/tests/test_progit_flask_ui_issues.py @@ -1215,6 +1215,7 @@ class PagureFlaskIssuestests(tests.Modeltests): '"tag1"

' in output.data) data['csrf_token'] = csrf_token + tests.create_projects_git(tests.HERE) output = self.app.post( '/test/tag/tag1/edit', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) @@ -1280,6 +1281,7 @@ class PagureFlaskIssuestests(tests.Modeltests): # Edit tag user.username = 'pingou' with tests.user_set(pagure.APP, user): + tests.create_projects_git(tests.HERE) output = self.app.post( '/test/droptag/', data={}, follow_redirects=True) self.assertEqual(output.status_code, 200) diff --git a/tests/test_progit_flask_ui_plugins_progit_request_hook.py b/tests/test_progit_flask_ui_plugins_progit_request_hook.py index a8b8ab2..aa15828 100644 --- a/tests/test_progit_flask_ui_plugins_progit_request_hook.py +++ b/tests/test_progit_flask_ui_plugins_progit_request_hook.py @@ -87,6 +87,7 @@ class PagureFlaskPluginPagureRequestHooktests(tests.Modeltests): tests.create_projects_git(os.path.join(tests.HERE, 'requests')) # With the git repo + tests.create_projects_git(tests.HERE) output = self.app.post( '/test/settings/pagure requests', data=data, follow_redirects=True) diff --git a/tests/test_progit_flask_ui_plugins_progit_ticket_hook.py b/tests/test_progit_flask_ui_plugins_progit_ticket_hook.py index d3d1c1d..299455f 100644 --- a/tests/test_progit_flask_ui_plugins_progit_ticket_hook.py +++ b/tests/test_progit_flask_ui_plugins_progit_ticket_hook.py @@ -87,6 +87,7 @@ class PagureFlaskPluginPagureTicketHooktests(tests.Modeltests): tests.create_projects_git(os.path.join(tests.HERE, 'tickets')) # With the git repo + tests.create_projects_git(tests.HERE) output = self.app.post( '/test/settings/pagure tickets', data=data, follow_redirects=True) diff --git a/tests/test_progit_flask_ui_repo.py b/tests/test_progit_flask_ui_repo.py index 0c53945..eea7466 100644 --- a/tests/test_progit_flask_ui_repo.py +++ b/tests/test_progit_flask_ui_repo.py @@ -105,6 +105,7 @@ class PagureFlaskRepotests(tests.Modeltests): in output.data) data['user'] = 'foo' + tests.create_projects_git(tests.HERE) output = self.app.post( '/test/adduser', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) @@ -176,6 +177,7 @@ class PagureFlaskRepotests(tests.Modeltests): in output.data) data['group'] = 'foo' + tests.create_projects_git(tests.HERE) output = self.app.post( '/test/addgroup', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) @@ -209,6 +211,7 @@ class PagureFlaskRepotests(tests.Modeltests): user.username = 'pingou' with tests.user_set(pagure.APP, user): + tests.create_projects_git(tests.HERE) output = self.app.post('/test/settings') csrf_token = output.data.split( @@ -272,6 +275,7 @@ class PagureFlaskRepotests(tests.Modeltests): user.username = 'pingou' with tests.user_set(pagure.APP, user): + tests.create_projects_git(tests.HERE) output = self.app.post('/test/update', follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertTrue('
' in output.data) @@ -1514,6 +1518,7 @@ index 0000000..fb7093d repo = pagure.lib.get_project(self.session, 'test') self.assertEqual(repo.hook_token, 'aaabbbccc') + tests.create_projects_git(tests.HERE) output = self.app.post( '/test/hook_token', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) @@ -1567,6 +1572,7 @@ index 0000000..fb7093d self.assertEqual(output.status_code, 400) data['regenerate'] = 'tickets' + tests.create_projects_git(tests.HERE) output = self.app.post( '/test/regenerate', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) @@ -1753,7 +1759,92 @@ index 0000000..fb7093d '