Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit 2fdf8a7328687f59a4a2f508fc775202f46dbe42
Author: Bohuslav Kabrda <bkabrda(a)redhat.com>
Date: Thu Mar 21 10:27:42 2013 +0100
Properly deal with inactive mock chroots, closes #50
---------------------------------------------------------------
coprs_frontend/coprs/logic/builds_logic.py | 4 +---
coprs_frontend/coprs/logic/coprs_logic.py | 11 +++++++++--
coprs_frontend/coprs/models.py | 4 ++++
.../coprs/templates/coprs/detail/overview.html | 12 ++++++------
coprs_frontend/coprs/templates/coprs/show.html | 2 +-
5 files changed, 21 insertions(+), 12 deletions(-)
diff --git a/coprs_frontend/coprs/logic/builds_logic.py
b/coprs_frontend/coprs/logic/builds_logic.py
index 1ef7252..191e95b 100644
--- a/coprs_frontend/coprs/logic/builds_logic.py
+++ b/coprs_frontend/coprs/logic/builds_logic.py
@@ -61,9 +61,7 @@ class BuildsLogic(object):
pkgs=pkgs,
copr=copr,
repos=copr.repos,
- chroots=' '.join(map(lambda x: x.chroot_name,
- filter(lambda b: b.is_active, #only add active chroots
- copr.mock_chroots))),
+ chroots=' '.join(map(lambda x: x.chroot_name,
copr.active_mock_chroots)),
user=user,
submitted_on=int(time.time()))
# no need to check for authorization here
diff --git a/coprs_frontend/coprs/logic/coprs_logic.py
b/coprs_frontend/coprs/logic/coprs_logic.py
index 9418090..abc8f0b 100644
--- a/coprs_frontend/coprs/logic/coprs_logic.py
+++ b/coprs_frontend/coprs/logic/coprs_logic.py
@@ -41,7 +41,9 @@ class CoprsLogic(object):
query = db.session.query(models.Copr).\
join(models.Copr.owner).\
- options(db.contains_eager(models.Copr.owner))
+ options(db.contains_eager(models.Copr.owner)).\
+ order_by(models.Copr.id.desc())
+
if user_relation == 'owned':
query = query.filter(models.User.openid_name ==
models.User.openidize_name(username))
elif user_relation == 'allowed':
@@ -51,7 +53,12 @@ class CoprsLogic(object):
join(aliased_user, models.CoprPermission.user).\
filter(aliased_user.openid_name ==
models.User.openidize_name(username))
if with_mock_chroots:
- query = query.options(db.subqueryload(*models.Copr.mock_chroots.attr))
+ query = query.outerjoin(*models.Copr.mock_chroots.attr).\
+ options(db.contains_eager(*models.Copr.mock_chroots.attr)).\
+ order_by(models.MockChroot.os_release.asc()).\
+ order_by(models.MockChroot.os_version.asc()).\
+ order_by(models.MockChroot.arch.asc())
+
return query
@classmethod
diff --git a/coprs_frontend/coprs/models.py b/coprs_frontend/coprs/models.py
index 957b80e..291df11 100644
--- a/coprs_frontend/coprs/models.py
+++ b/coprs_frontend/coprs/models.py
@@ -139,6 +139,10 @@ class Copr(db.Model, Serializer):
def instructions_or_not_filled(self):
return self.instructions or 'Instructions not filled in by author.'
+ @property
+ def active_mock_chroots(self):
+ return filter(lambda x: x.is_active, self.mock_chroots)
+
class CoprPermission(db.Model, Serializer):
# 0 = nothing, 1 = asked for, 2 = approved
# not using enum, as that translates to varchar on some DBs
diff --git a/coprs_frontend/coprs/templates/coprs/detail/overview.html
b/coprs_frontend/coprs/templates/coprs/detail/overview.html
index 0d74561..6152ddf 100644
--- a/coprs_frontend/coprs/templates/coprs/detail/overview.html
+++ b/coprs_frontend/coprs/templates/coprs/detail/overview.html
@@ -12,10 +12,10 @@
<th class="leftmost">Release</th>
<th class="rightmost">Architecture</th>
</tr>
- {% for mock_chroot in copr.mock_chroots %}
- {% if loop.index < copr.mock_chroots|length %}
- {% if mock_chroot.os_release != copr.mock_chroots[loop.index].os_release or
- mock_chroot.os_version != copr.mock_chroots[loop.index].os_version %}
+ {% for mock_chroot in copr.active_mock_chroots %}
+ {% if loop.index < copr.active_mock_chroots|length %}
+ {% if mock_chroot.os_release != copr.active_mock_chroots[loop.index].os_release
or
+ mock_chroot.os_version != copr.active_mock_chroots[loop.index].os_version
%}
{# next release is different => release-end #}
<tr class="release-end">
{% else %}
@@ -24,8 +24,8 @@
{% else %}{# last line => release-end for sure #}
<tr class="release-end">
{% endif %}
- {% if mock_chroot.os_release != copr.mock_chroots[loop.index0 - 1].os_release or
- mock_chroot.os_version != copr.mock_chroots[loop.index0 - 1].os_version or
+ {% if mock_chroot.os_release != copr.active_mock_chroots[loop.index0 -
1].os_release or
+ mock_chroot.os_version != copr.active_mock_chroots[loop.index0 - 1].os_version or
loop.index0 == 0 %}
{# previous os_release-os_version were different or this is the first one #}
<td>{{ mock_chroot.os_release|capitalize }} {{ mock_chroot.os_version
}}</td>
diff --git a/coprs_frontend/coprs/templates/coprs/show.html
b/coprs_frontend/coprs/templates/coprs/show.html
index c28ebcc..5ccde32 100644
--- a/coprs_frontend/coprs/templates/coprs/show.html
+++ b/coprs_frontend/coprs/templates/coprs/show.html
@@ -25,7 +25,7 @@
<a href="{{ url_for('coprs_ns.copr_detail', username =
copr.owner.name, coprname = copr.name) }}">{{ copr.owner.name }}/{{ copr.name
}}</a>
<p>{{ copr.description_or_not_filled }}</p>
<p class="repos">
- {% for mock_chroot in copr.mock_chroots %}
+ {% for mock_chroot in copr.active_mock_chroots %}
{{ mock_chroot.os_release|os_name_short(mock_chroot.os_version) }}.{{
mock_chroot.arch }}{% if not loop.last %}, {% endif %}
{% endfor %}
</p>