From a541e0b75fc702a26c34c9d12ecb1b0bd27773d1 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 01 2015 09:26:37 +0000 Subject: [PATCH 1/4] Add a new endpoint to delete a specific branch in a repo --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index e693439..288503b 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -1307,3 +1307,40 @@ def edit_file(repo, branchname, filename, username=None): user=user, branches=repo_obj.listall_branches(), ) + + +@APP.route('///delete', methods=['POST']) +@APP.route('/fork////delete', methods=['POST']) +@cla_required +def delete_branch(repo, branchname, username=None): + """ Delete the branch of a project. + """ + repo_obj = pagure.lib.get_project(SESSION, repo, user=username) + + if not repo_obj: + flask.abort(404, 'Project not found') + + if not is_repo_admin(repo_obj): + flask.abort( + 403, + 'You are not allowed to change the settings for this project') + + if branchname == 'master': + flask.abort(403, 'You are not allowed to delete the master branch') + + reponame = pagure.get_repo_path(repo_obj) + repo_git = pygit2.Repository(reponame) + + if branchname not in repo_git.listall_branches(): + flask.abort(404, 'Branch no found') + + try: + branch = repo_git.lookup_branch(branchname) + branch.delete() + flask.flash('Branch `%s` deleted' % branchname) + except pygit2.GitError, err: + APP.logger.exception(err) + flask.flash('Could not delete `%s`' % branchname, 'error') + + return flask.redirect( + flask.url_for('view_repo', repo=repo, username=username)) From 58230f756c02f675ade11aed3dd58a47f92f23c8 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 01 2015 09:26:37 +0000 Subject: [PATCH 2/4] Add the button to delete the branch in the repo_info template Adjust the endpoints to have a form that we can get the CSRF token from And change the CSS a little bit to make things prettier --- diff --git a/pagure/static/pagure.css b/pagure/static/pagure.css index a7d5db8..8cbebf6 100644 --- a/pagure/static/pagure.css +++ b/pagure/static/pagure.css @@ -251,7 +251,7 @@ header h1 span { margin: 0; } -.inline h2, .inline a, .inline li{ +.inline h2, .inline a, .inline li, .inline_it{ display: inline-block; } diff --git a/pagure/templates/repo_info.html b/pagure/templates/repo_info.html index e89afd3..1a8ca04 100644 --- a/pagure/templates/repo_info.html +++ b/pagure/templates/repo_info.html @@ -3,6 +3,10 @@ {% block title %}{{ select.capitalize() }} - {{ repo.name }}{% endblock %} {%block tag %}home{% endblock %} +{% block header %} + +{% endblock %} {% block repo %} @@ -127,7 +131,7 @@

Last {{ last_commits | length }} commits

{% endif %} {% if diff_commits and authenticated %} - + @@ -135,6 +139,19 @@ {% endif %} + {% if repo_admin and branchname != 'master' %} +
+ {{ form.csrf_token }} + +
+ {% endif %}
    {% for commit in last_commits %}
  • diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index 288503b..4c4fe82 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -132,6 +132,7 @@ def view_repo(repo, username=None): tree=tree, diff_commits=diff_commits, repo_admin=is_repo_admin(repo), + form=pagure.forms.ConfirmationForm(), ) @@ -206,6 +207,7 @@ def view_repo_branch(repo, branchname, username=None): tree=sorted(last_commits[0].tree, key=lambda x: x.filemode), diff_commits=diff_commits, repo_admin=is_repo_admin(repo), + form=pagure.forms.ConfirmationForm(), ) @@ -306,6 +308,7 @@ def view_commits(repo, branchname=None, username=None): page=page, total_page=total_page, repo_admin=is_repo_admin(repo), + form=pagure.forms.ConfirmationForm(), ) From 816eab1a2c876dab07100a5f2404ad692d30541f Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 01 2015 09:38:14 +0000 Subject: [PATCH 3/4] Fix the error message to reflect what is happening in fact --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index 4c4fe82..28f1779 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -1326,7 +1326,8 @@ def delete_branch(repo, branchname, username=None): if not is_repo_admin(repo_obj): flask.abort( 403, - 'You are not allowed to change the settings for this project') + 'You are not allowed to change the delete branch for this ' + 'project') if branchname == 'master': flask.abort(403, 'You are not allowed to delete the master branch') From c85bfce6b61bf1d8f0fdfa2f51f038117577d81f Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jul 01 2015 09:41:32 +0000 Subject: [PATCH 4/4] Same player plays again --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index 28f1779..c4c8ed7 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -1326,8 +1326,7 @@ def delete_branch(repo, branchname, username=None): if not is_repo_admin(repo_obj): flask.abort( 403, - 'You are not allowed to change the delete branch for this ' - 'project') + 'You are not allowed to delete branch for this project') if branchname == 'master': flask.abort(403, 'You are not allowed to delete the master branch')