[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