Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit f4fbc295001e114f2af0d8d13bd6f8b9590b3be6
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Wed Mar 27 10:40:16 2013 +0100
Only allow creating builds when the copr is not being renamed or otherwise
manipulated
---------------------------------------------------------------
coprs_frontend/coprs/logic/builds_logic.py | 1 +
.../coprs/views/coprs_ns/coprs_builds.py | 22 +++++++++++--------
.../tests/test_logic/test_builds_logic.py | 9 ++++++++
3 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/coprs_frontend/coprs/logic/builds_logic.py
b/coprs_frontend/coprs/logic/builds_logic.py
index 191e95b..247c01a 100644
--- a/coprs_frontend/coprs/logic/builds_logic.py
+++ b/coprs_frontend/coprs/logic/builds_logic.py
@@ -57,6 +57,7 @@ class BuildsLogic(object):
@classmethod
def add(cls, user, pkgs, copr):
+ coprs_logic.CoprsLogic.raise_if_unfinished_action(user, copr)
build = models.Build(
pkgs=pkgs,
copr=copr,
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
b/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
index eae3c1d..1f91e49 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
@@ -51,16 +51,20 @@ def copr_new_build(username, coprname):
return page_not_found('Copr with name {0} does not
exist.'.format(coprname))
if form.validate_on_submit() and flask.g.user.can_build_in(copr):
- build = builds_logic.BuildsLogic.add(user=flask.g.user,
- pkgs=form.pkgs.data.replace('\n',
' '),
- copr=copr) # we're checking
authorization above for now
- if flask.g.user.proven:
- build.memory_reqs = form.memory_reqs.data
- build.timeout = form.timeout.data
+ try:
+ build = builds_logic.BuildsLogic.add(user=flask.g.user,
+
pkgs=form.pkgs.data.replace('\n', ' '),
+ copr=copr) # we're checking
authorization above for now
+ if flask.g.user.proven:
+ build.memory_reqs = form.memory_reqs.data
+ build.timeout = form.timeout.data
+ except exceptions.ActionInProgressException as e:
+ flask.flash('Can\'t build in this Copr, there is an operation in
progress: {0}'.format(e.action))
+ db.session.rollback()
+ else:
+ flask.flash("Build was added")
+ db.session.commit()
- db.session.commit()
-
- flask.flash("Build was added")
return flask.redirect(flask.url_for('coprs_ns.copr_builds',
username=username, coprname=copr.name))
else:
return copr_add_build(username=username, coprname=coprname, form=form)
diff --git a/coprs_frontend/tests/test_logic/test_builds_logic.py
b/coprs_frontend/tests/test_logic/test_builds_logic.py
index 007f649..2a2468b 100644
--- a/coprs_frontend/tests/test_logic/test_builds_logic.py
+++ b/coprs_frontend/tests/test_logic/test_builds_logic.py
@@ -1,4 +1,8 @@
+import pytest
+
+from coprs.exceptions import ActionInProgressException
from coprs.logic.builds_logic import BuildsLogic
+
from tests.coprs_test_case import CoprsTestCase
class TestBuildsLogic(CoprsTestCase):
@@ -8,3 +12,8 @@ class TestBuildsLogic(CoprsTestCase):
b = BuildsLogic.add(self.u2, 'blah blah', self.c2)
self.db.session.commit()
assert b.chroots == self.mc3.chroot_name
+
+ def test_add_raises_if_copr_has_unfinished_actions(self, f_users, f_coprs, f_actions,
f_db):
+ with pytest.raises(ActionInProgressException):
+ b = BuildsLogic.add(self.u1, 'blah blah', self.c1)
+ self.db.session.rollback()