[copr] master: Allow resubmitting builds by a single button (89bfdee)
bkabrda at fedoraproject.org
bkabrda at fedoraproject.org
Tue Jan 22 07:02:07 UTC 2013
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 89bfdeeb23d14fe20924faac89042f702345e662
Author: Bohuslav Kabrda <bkabrda at redhat.com>
Date: Mon Jan 21 13:25:04 2013 +0100
Allow resubmitting builds by a single button
>---------------------------------------------------------------
coprs_frontend/coprs/logic/builds_logic.py | 6 +++++
.../coprs/templates/coprs/detail/_build_forms.html | 8 +++++++
.../templates/coprs/detail/_builds_table.html | 7 +++--
.../coprs/views/coprs_ns/coprs_builds.py | 23 ++++++++++++++++++++
4 files changed, 41 insertions(+), 3 deletions(-)
diff --git a/coprs_frontend/coprs/logic/builds_logic.py b/coprs_frontend/coprs/logic/builds_logic.py
index 41575ee..465db18 100644
--- a/coprs_frontend/coprs/logic/builds_logic.py
+++ b/coprs_frontend/coprs/logic/builds_logic.py
@@ -1,3 +1,5 @@
+import time
+
from coprs import db
from coprs import exceptions
from coprs import models
@@ -57,6 +59,10 @@ class BuildsLogic(object):
if check_authorized:
if not user.can_build_in(copr):
raise exceptions.InsufficientRightsException('User {0} cannot build in copr {1}/{2}'.format(user.name, copr.owner.name, copr.name))
+ if not build.submitted_on:
+ build.submitted_on = int(time.time())
+ if not build.user:
+ build.user = user
coprs_logic.CoprsLogic.increment_build_count(user, copr)
db.session.add(build)
diff --git a/coprs_frontend/coprs/templates/coprs/detail/_build_forms.html b/coprs_frontend/coprs/templates/coprs/detail/_build_forms.html
index c01dd20..edc6964 100644
--- a/coprs_frontend/coprs/templates/coprs/detail/_build_forms.html
+++ b/coprs_frontend/coprs/templates/coprs/detail/_build_forms.html
@@ -24,3 +24,11 @@
</form>
{% endif %}
{% endmacro %}
+
+{% macro copr_build_repeat_form(build) %}
+ {% if build.cancelable %}
+ <form action="{{ url_for('coprs_ns.copr_repeat_build', username=build.copr.owner.name, coprname=build.copr.name, build_id=build.id)}}" method="post">
+ <input type="submit" value="Repeat">
+ </form>
+ {% endif %}
+{% endmacro %}
diff --git a/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html b/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html
index b2fa2b9..dfaf9de 100644
--- a/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html
+++ b/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html
@@ -1,4 +1,4 @@
-{% from "coprs/detail/_build_forms.html" import copr_build_cancel_form %}
+{% from "coprs/detail/_build_forms.html" import copr_build_cancel_form, copr_build_repeat_form %}
{% macro builds_table(builds) %}
{% if builds %}
@@ -25,8 +25,9 @@
<td>
{% if g.user and g.user == build.user %}
{{ copr_build_cancel_form(build) }}
- {% else %}
- ---
+ {% endif %}
+ {% if g.user and g.user.can_build_in(copr) %}
+ {{ copr_build_repeat_form(build) }}
{% endif %}
</td>
</tr>
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py b/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
index 805a9db..1e28499 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
@@ -85,3 +85,26 @@ def copr_cancel_build(username, coprname, build_id):
flask.flash('Build was canceled')
return flask.redirect(flask.url_for('coprs_ns.copr_detail', username = username, coprname = coprname))
+
+ at coprs_ns.route('/detail/<username>/<coprname>/repeat_build/<int:build_id>/', methods = ['POST'])
+ at login_required
+def copr_repeat_build(username, coprname, build_id):
+ build = builds_logic.BuildsLogic.get(flask.g.user, build_id).first()
+ copr = coprs_logic.CoprsLogic.get(flask.g.user, username=username, coprname=coprname).first()
+
+ if not build: # hey, this Build doesn't exist
+ return page_not_found('Build with id {0} does not exist.'.format(build_id))
+
+ if not copr: # hey, this Copr doesn't exist
+ return page_not_found('Copr {0}/{1} does not exist.'.format(username, coprname))
+
+ # TODO: do intersection of chroots with currently active?
+ new_build = models.Build()
+ for a in ['pkgs', 'chroots', 'repos', 'memory_reqs', 'timeout']:
+ setattr(new_build, a, getattr(build, a))
+ builds_logic.BuildsLogic.new(flask.g.user, new_build, copr)
+
+ db.session.commit()
+ flask.flash('Build was resubmitted')
+
+ return flask.redirect(flask.url_for('coprs_ns.copr_builds', username = username, coprname = coprname))
More information about the copr-devel
mailing list