Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit 37ac6446486bd5dbf9754ffe41958205d38060df
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Tue May 27 14:09:14 2014 +0200
[frontend] skipping bad package urls
---------------------------------------------------------------
.../coprs/views/coprs_ns/coprs_builds.py | 54 +++++++++++++-------
.../coprs/views/coprs_ns/coprs_general.py | 32 ++++++++---
.../test_views/test_coprs_ns/test_coprs_builds.py | 12 ++--
.../test_views/test_coprs_ns/test_coprs_general.py | 4 +-
4 files changed, 66 insertions(+), 36 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
index 20112a5..22f5c6b 100644
--- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
+++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
@@ -1,4 +1,5 @@
import flask
+import re
from coprs import db
from coprs import forms
@@ -98,30 +99,45 @@ def copr_new_build(username, coprname):
form = forms.BuildFormFactory.create_form_cls(copr.active_chroots)()
if form.validate_on_submit():
- try:
- pkgs = pkgs=form.pkgs.data.replace("\n", "
").split(" ")
+ pkgs = pkgs=form.pkgs.data.replace("\n", " ").split("
")
+
+ # validate (and skip bad) urls
+ bad_urls = []
+ for pkg in pkgs:
+ if not re.match("^.*\.src\.rpm$", pkg):
+ bad_urls.append(pkg)
+ flask.flash("Bad url: {0} (skipped)".format(pkg))
+ for bad_url in bad_urls:
+ pkgs.remove(bad_url)
+
+ if not pkgs:
+ flask.flash("No builds submitted")
+ else:
+ # check which chroots we need
chroots = []
for chroot in copr.active_chroots:
if chroot.name in form.selected_chroots:
chroots.append(chroot)
- for pkg in pkgs:
- build = builds_logic.BuildsLogic.add(
- user=flask.g.user,
- pkgs=pkg,
- copr=copr,
- chroots = chroots)
-
- if flask.g.user.proven:
- build.memory_reqs = form.memory_reqs.data
- build.timeout = form.timeout.data
-
- except (ActionInProgressException, InsufficientRightsException) as e:
- flask.flash(str(e))
- db.session.rollback()
- else:
- flask.flash("Build was added")
- db.session.commit()
+ # build each package as a separate build
+ try:
+ for pkg in pkgs:
+ build = builds_logic.BuildsLogic.add(
+ user=flask.g.user,
+ pkgs=pkg,
+ copr=copr,
+ chroots = chroots)
+
+ if flask.g.user.proven:
+ build.memory_reqs = form.memory_reqs.data
+ build.timeout = form.timeout.data
+
+ except (ActionInProgressException, InsufficientRightsException) as e:
+ flask.flash(str(e))
+ db.session.rollback()
+ else:
+ flask.flash("Build was added")
+ db.session.commit()
return flask.redirect(flask.url_for("coprs_ns.copr_builds",
username=username,
diff --git a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index 0dd9746..2d3f474 100644
--- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -1,5 +1,6 @@
import os
import time
+import re
import flask
import platform
@@ -118,17 +119,30 @@ def copr_new(username):
flask.flash("New project was successfully created.")
if form.initial_pkgs.data:
- # we need to build each package separately now
pkgs = form.initial_pkgs.data.replace("\n", "
").split(" ")
- for pkg in pkgs:
- builds_logic.BuildsLogic.add(
- flask.g.user,
- pkgs=pkg,
- copr=copr)
- db.session.commit()
- flask.flash("Initial packages were successfully submitted "
- "for building.")
+ # validate (and skip bad) urls
+ bad_urls = []
+ for pkg in pkgs:
+ if not re.match("^.*\.src\.rpm$", pkg):
+ bad_urls.append(pkg)
+ flask.flash("Bad url: {0} (skipped)".format(pkg))
+ for bad_url in bad_urls:
+ pkgs.remove(bad_url)
+
+ if not pkgs:
+ flask.flash("No initial packages submitted")
+ else:
+ # build each package as a separate build
+ for pkg in pkgs:
+ builds_logic.BuildsLogic.add(
+ flask.g.user,
+ pkgs=pkg,
+ copr=copr)
+
+ db.session.commit()
+ flask.flash("Initial packages were successfully submitted "
+ "for building.")
return flask.redirect(flask.url_for("coprs_ns.copr_detail",
username=flask.g.user.name,
diff --git a/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py
b/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py
index c88799c..dab7a94 100644
--- a/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py
+++ b/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py
@@ -20,10 +20,10 @@ class TestCoprAddBuild(CoprsTestCase):
self.db.session.add_all([self.u1, self.c1])
self.test_client.post("/coprs/{0}/{1}/new_build/"
.format(self.u1.name, self.c1.name),
- data={"pkgs": "http://testing"},
+ data={"pkgs":
"http://testing.src.rpm"},
follow_redirects=True)
- assert self.models.Build.query.first().pkgs == "http://testing"
+ assert self.models.Build.query.first().pkgs ==
"http://testing.src.rpm"
@TransactionDecorator("u1")
def test_copr_allowed_user_can_add_build(self, f_users, f_coprs,
@@ -33,10 +33,10 @@ class TestCoprAddBuild(CoprsTestCase):
self.db.session.add_all([self.u2, self.c2])
self.test_client.post("/coprs/{0}/{1}/new_build/"
.format(self.u2.name, self.c2.name),
- data={"pkgs": "http://testing"},
+ data={"pkgs":
"http://testing.src.rpm"},
follow_redirects=True)
- assert self.models.Build.query.first().pkgs == "http://testing"
+ assert self.models.Build.query.first().pkgs ==
"http://testing.src.rpm"
@TransactionDecorator("u1")
def test_copr_not_yet_allowed_user_cant_add_build(self, f_users, f_coprs,
@@ -45,7 +45,7 @@ class TestCoprAddBuild(CoprsTestCase):
self.db.session.add_all([self.u2, self.c3])
self.test_client.post("/coprs/{0}/{1}/new_build/"
.format(self.u2.name, self.c3.name),
- data={"pkgs": "http://testing"},
+ data={"pkgs":
"http://testing.src.rpm"},
follow_redirects=True)
assert not self.models.Build.query.first()
@@ -59,7 +59,7 @@ class TestCoprAddBuild(CoprsTestCase):
self.db.session.add_all([self.u1, self.c1])
self.test_client.post("/coprs/{0}/{1}/new_build/"
.format(self.u1.name, self.c1.name),
- data={"pkgs": "http://testing"},
+ data={"pkgs":
"http://testing.src.rpm"},
follow_redirects=True)
assert not self.models.Build.query.first()
diff --git a/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py
b/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py
index 06137e7..a180c7d 100644
--- a/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py
+++ b/frontend/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_general.py
@@ -129,8 +129,8 @@ class TestCoprNew(CoprsTestCase):
r = self.test_client.post("/coprs/{0}/new/".format(self.u1.name),
data={"name": "foo",
"fedora-rawhide-i386": "y",
- "initial_pkgs": ["http://f",
- "http://b"]},
+ "initial_pkgs":
["http://a/f.src.rpm",
+
"http://a/b.src.rpm"]},
follow_redirects=True)
copr = self.models.Copr.query.filter(