[copr] master: 1054472 - Fix deleting multiple SRPMs (f209aee)
by Richard Marko
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit f209aee7eefa33dcd8798b518962bc93bc93140f
Author: Richard Marko <rmarko(a)fedoraproject.org>
Date: Mon Jan 20 16:23:12 2014 +0100
1054472 - Fix deleting multiple SRPMs
Adds Action.data column and fills it with SRPM list rather than
mis-using 255 long new_value column.
Signed-off-by: Richard Marko <rmarko(a)fedoraproject.org>
>---------------------------------------------------------------
backend/actions.py | 2 +-
.../versions/294405dfc7c0_add_action_data_fiel.py | 24 ++++++++++++++++++++
coprs_frontend/coprs/logic/builds_logic.py | 2 +-
coprs_frontend/coprs/models.py | 2 +
.../test_views/test_coprs_ns/test_coprs_builds.py | 2 +-
5 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/backend/actions.py b/backend/actions.py
index 11451cc..2568459 100644
--- a/backend/actions.py
+++ b/backend/actions.py
@@ -38,7 +38,7 @@ class Action(object):
project = self.data['old_value']
packages = map(lambda x:
os.path.basename(x).replace('.src.rpm', ''),
- self.data['new_value'].split())
+ self.data['data'].split())
path = os.path.join(self.destdir, project)
diff --git a/coprs_frontend/alembic/versions/294405dfc7c0_add_action_data_fiel.py b/coprs_frontend/alembic/versions/294405dfc7c0_add_action_data_fiel.py
new file mode 100644
index 0000000..6463cf5
--- /dev/null
+++ b/coprs_frontend/alembic/versions/294405dfc7c0_add_action_data_fiel.py
@@ -0,0 +1,24 @@
+"""add Action.data field
+
+Revision ID: 294405dfc7c0
+Revises: 3a415c6392bc
+Create Date: 2014-01-20 15:43:09.986912
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '294405dfc7c0'
+down_revision = '3a415c6392bc'
+
+from alembic import op
+import sqlalchemy as sa
+
+
+def upgrade():
+ """ Add 'data' colum to action table. """
+ op.add_column('action', sa.Column('data', sa.Text()))
+
+
+def downgrade():
+ """ Drop 'data' colum from action table. """
+ op.drop_column('action', 'data')
diff --git a/coprs_frontend/coprs/logic/builds_logic.py b/coprs_frontend/coprs/logic/builds_logic.py
index 4881ab6..7721b30 100644
--- a/coprs_frontend/coprs/logic/builds_logic.py
+++ b/coprs_frontend/coprs/logic/builds_logic.py
@@ -138,7 +138,7 @@ class BuildsLogic(object):
object_id=build.id,
old_value='{0}/{1}'.format(build.copr.owner.name,
build.copr.name),
- new_value=build.pkgs,
+ data=build.pkgs,
created_on=int(time.time()))
db.session.add(action)
diff --git a/coprs_frontend/coprs/models.py b/coprs_frontend/coprs/models.py
index 4352661..527461b 100644
--- a/coprs_frontend/coprs/models.py
+++ b/coprs_frontend/coprs/models.py
@@ -379,6 +379,8 @@ class Action(db.Model, Serializer):
# old and new values of the changed property
old_value = db.Column(db.String(255))
new_value = db.Column(db.String(255))
+ # additional data
+ data = db.Column(db.Text)
# result of the action, see helpers.BackendResultEnum
result = db.Column(db.Integer, default=helpers.BackendResultEnum('waiting'))
# optional message from the backend/whatever
diff --git a/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py b/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py
index c690833..83c2754 100644
--- a/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py
+++ b/coprs_frontend/tests/test_views/test_coprs_ns/test_coprs_builds.py
@@ -79,7 +79,7 @@ class TestCoprDeleteBuild(CoprsTestCase):
act = self.models.Action.query.first()
assert act.object_type == 'build'
assert act.old_value == 'user1/foocopr'
- assert act.new_value == pkgs
+ assert act.data == pkgs
@TransactionDecorator('u2')
def test_copr_build_non_submitter_cannot_delete_build(self, f_users, f_coprs, f_mock_chroots, f_builds, f_db):
10 years, 4 months
[copr] master: [spec] tighten acl on copr-be.conf (95df122)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 95df1223fde0b641c5380bd074aad8c4a46294fe
Author: Miroslav Suchý <miroslav(a)suchy.cz>
Date: Wed Jan 22 20:21:23 2014 +0100
[spec] tighten acl on copr-be.conf
>---------------------------------------------------------------
copr.spec | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/copr.spec b/copr.spec
index 8ec4235..0c38e02 100644
--- a/copr.spec
+++ b/copr.spec
@@ -354,7 +354,7 @@ fi
%doc %{_pkgdocdir}/lighttpd
%doc %{_pkgdocdir}/playbooks
%dir %{_sysconfdir}/copr
-%config(noreplace) %{_sysconfdir}/copr/copr-be.conf
+%config(noreplace) %attr(0640, root, copr) %{_sysconfdir}/copr/copr-be.conf
%{_unitdir}/copr-backend.service
%{_tmpfilesdir}/copr-backend.conf
%{_sbindir}/copr-prune-repo
10 years, 4 months
[copr] master: [backend] - add missing import (d715167)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit d715167d5850df3318ccb968eff26ba6a3e947c0
Author: Miroslav Suchý <miroslav(a)suchy.cz>
Date: Wed Jan 22 20:16:46 2014 +0100
[backend] - add missing import
addressing:
Traceback (most recent call last):
File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/share/copr/backend/dispatcher.py", line 390, in run
callback=mockremote.CliLogCallBack(quiet=True,logfn=chrootlogfile))
File "/usr/share/copr/backend/mockremote.py", line 456, in __init__
self.callback.log("Setting up builder: %s" % builder)
File "/usr/share/copr/backend/mockremote.py", line 211, in log
log(self.logfn, msg, self.quiet)
File "/usr/share/copr/backend/mockremote.py", line 89, in log
fcntl.flock(lfh, fcntl.LOCK_EX)
NameError: global name 'fcntl' is not define
>---------------------------------------------------------------
backend/mockremote.py | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/backend/mockremote.py b/backend/mockremote.py
index 59cff55..fca9928 100755
--- a/backend/mockremote.py
+++ b/backend/mockremote.py
@@ -25,6 +25,7 @@
# take args from mockchain (more or less)
+import fcntl
import os
import sys
import subprocess
10 years, 4 months
[copr] master: 1054082 - general: encode to utf8 if err in mimetext (5b02d9d)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 5b02d9d9fa0ec1ba887291544071047f238b050a
Author: Igor Gnatenko <i.gnatenko.brain(a)gmail.com>
Date: Wed Jan 22 04:32:57 2014 +0400
1054082 - general: encode to utf8 if err in mimetext
Reference: https://bugzilla.redhat.com/show_bug.cgi?id=1054082
Signed-off-by: Igor Gnatenko <i.gnatenko.brain(a)gmail.com>
>---------------------------------------------------------------
.../coprs/views/coprs_ns/coprs_general.py | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index 1973ae5..26e6a8f 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -298,7 +298,10 @@ def copr_legal_flag(username, coprname):
navigate_to = "\nNavigate to http://%s%s" % (hostname, flask.url_for('admin_ns.legal_flag'))
contact = "\nContact on owner is: %s <%s>" % (username, copr.owner.mail)
reported_by = "\nReported by %s <%s>" % (flask.g.user.name, flask.g.user.mail)
- msg = MIMEText(form.comment.data + navigate_to + contact + reported_by)
+ try:
+ msg = MIMEText(form.comment.data + navigate_to + contact + reported_by, "plain")
+ except UnicodeEncodeError:
+ msg = MIMEText(form.comment.data.encode('utf-8') + navigate_to + contact + reported_by, "plain", "utf-8")
msg['Subject'] = 'Legal flag raised on %s' % coprname
msg['From'] = 'root@%s' % hostname
msg['To'] = ', '.join(send_to)
10 years, 4 months
[copr] master: [backend] lock log file before writing (a0efd10)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit a0efd1068f13915cb464e84c74ded44f9f4d3c7d
Author: Miroslav Suchý <miroslav(a)suchy.cz>
Date: Tue Jan 21 01:07:41 2014 +0100
[backend] lock log file before writing
this prevent race condition when two workers appends data at exactly same time.
>---------------------------------------------------------------
backend/dispatcher.py | 6 +++++-
backend/mockremote.py | 21 ++++++++++-----------
2 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/backend/dispatcher.py b/backend/dispatcher.py
index d251075..589c196 100644
--- a/backend/dispatcher.py
+++ b/backend/dispatcher.py
@@ -1,3 +1,4 @@
+import fcntl
import re
import os
import sys
@@ -79,7 +80,10 @@ class WorkerCallback(object):
if self.logfile:
now = time.strftime('%F %T')
try:
- open(self.logfile, 'a').write(str(now) + ': ' + msg + '\n')
+ with open(self.logfile, 'a') as lf:
+ fcntl.flock(lf, fcntl.LOCK_EX)
+ lf.write(str(now) + ': ' + msg + '\n')
+ fcntl.flock(lf, fcntl.LOCK_UN)
except (IOError, OSError), e:
print >>sys.stderr, 'Could not write to logfile %s - %s' % (self.logfile, str(e))
diff --git a/backend/mockremote.py b/backend/mockremote.py
index 2d15d62..59cff55 100755
--- a/backend/mockremote.py
+++ b/backend/mockremote.py
@@ -81,14 +81,18 @@ def read_list_from_file(fn):
return lst
-def log(lf, msg):
+def log(lf, msg, quiet=None):
if lf:
now = time.time()
try:
- open(lf, 'a').write(str(now) + ':' + msg + '\n')
+ with open(lf, 'a') as lfh:
+ fcntl.flock(lfh, fcntl.LOCK_EX)
+ lfh.write(str(now) + ':' + msg + '\n')
+ fcntl.flock(lfh, fcntl.LOCK_UN)
except (IOError, OSError), e:
sys.stderr.write('Could not write to logfile %s - %s\n' % (lf, str(e)))
- print msg
+ if not quiet:
+ print msg
def get_ans_results(results, hostname):
if hostname in results['dark']:
@@ -204,14 +208,7 @@ class CliLogCallBack(DefaultCallBack):
self.log("Error: %s" % msg)
def log(self, msg):
- if self.logfn:
- now = time.time()
- try:
- open(self.logfn, 'a').write(str(now) + ':' + msg + '\n')
- except (IOError, OSError), e:
- print >> sys.stderr, 'Could not write to logfile %s - %s' % (self.logfn, str(e))
- if not self.quiet:
- print msg
+ log(self.logfn, msg, self.quiet)
class Builder(object):
def __init__(self, hostname, username, timeout, mockremote, buildroot_pkgs):
@@ -531,11 +528,13 @@ class MockRemote(object):
if not os.path.exists(chroot_dir):
os.makedirs(self.destdir + '/' + self.chroot)
r_log = open(chroot_dir + '/mockchain.log', 'a')
+ fcntl.flock(r_log, fcntl.LOCK_EX)
r_log.write('\n\n%s\n\n' % pkg)
r_log.write(b_out)
if b_err:
r_log.write('\nstderr\n')
r_log.write(b_err)
+ fcntl.flock(r_log, fcntl.LOCK_UN)
r_log.close()
10 years, 4 months
[copr] master: 1055594 - mockremote: always unquote pkg url (c68e2f6)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit c68e2f6de531f4ea694cd649feb5702f15b9ee83
Author: Igor Gnatenko <i.gnatenko.brain(a)gmail.com>
Date: Tue Jan 21 18:32:09 2014 +0400
1055594 - mockremote: always unquote pkg url
Reference: https://bugzilla.redhat.com/show_bug.cgi?id=1055594
Signed-off-by: Igor Gnatenko <i.gnatenko.brain(a)gmail.com>
>---------------------------------------------------------------
backend/mockremote.py | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/backend/mockremote.py b/backend/mockremote.py
index 1f348aa..2d15d62 100755
--- a/backend/mockremote.py
+++ b/backend/mockremote.py
@@ -36,6 +36,7 @@ import pipes
import time
import socket
import traceback
+import urllib
# where we should execute mockchain from on the remote
mockchain = '/usr/bin/mockchain'
@@ -488,6 +489,7 @@ class MockRemote(object):
self.failed = []
just_built = []
for pkg in to_be_built:
+ pkg = urllib.unquote("%s" % pkg)
if pkg in just_built:
self.callback.log("skipping duplicate pkg in this list: %s" % pkg)
continue
10 years, 4 months
[copr] master: 1054086 - change vendor tag (3888ac9)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 3888ac9003b85a79ec539a96cc13541699feb4fd
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Tue Jan 21 15:49:20 2014 +0100
1054086 - change vendor tag
>---------------------------------------------------------------
backend/dispatcher.py | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/backend/dispatcher.py b/backend/dispatcher.py
index a2e647f..d251075 100644
--- a/backend/dispatcher.py
+++ b/backend/dispatcher.py
@@ -377,7 +377,8 @@ class Worker(multiprocessing.Process):
chroot_repos.append(job.results + '/' + job.chroot)
chrootlogfile = chroot_destdir + '/build-%s.log' % job.build_id
macros = {'copr_username': job.user_name,
- 'copr_projectname': job.copr_name}
+ 'copr_projectname': job.copr_name,
+ 'vendor': "Fedora Project COPR (%s/%s)" % (job.user_name, job.copr_name)}
mr = mockremote.MockRemote(builder=ip, timeout=job.timeout,
destdir=job.destdir, chroot=job.chroot, cont=True, recurse=True,
repos=chroot_repos, macros=macros, buildroot_pkgs=job.buildroot_pkgs,
10 years, 4 months
[copr] new: [frontend] rename active_mock_chroots to active_chroots (a05b56c)
by Richard Marko
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : new
>---------------------------------------------------------------
commit a05b56c061557f0e0cc9d4530d86e210643a016c
Author: Richard Marko <rmarko(a)fedoraproject.org>
Date: Tue Jan 21 12:58:21 2014 +0100
[frontend] rename active_mock_chroots to active_chroots
Signed-off-by: Richard Marko <rmarko(a)fedoraproject.org>
>---------------------------------------------------------------
coprs_frontend/coprs/logic/builds_logic.py | 2 +-
coprs_frontend/coprs/models.py | 2 +-
.../coprs/templates/coprs/detail/overview.html | 16 ++++++++--------
coprs_frontend/coprs/templates/coprs/show.html | 2 +-
coprs_frontend/coprs/views/api_ns/api_general.py | 2 +-
coprs_frontend/tests/coprs_test_case.py | 2 +-
6 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/coprs_frontend/coprs/logic/builds_logic.py b/coprs_frontend/coprs/logic/builds_logic.py
index dc4851c..05ce536 100644
--- a/coprs_frontend/coprs/logic/builds_logic.py
+++ b/coprs_frontend/coprs/logic/builds_logic.py
@@ -83,7 +83,7 @@ class BuildsLogic(object):
# add BuildChroot object for each active chroot
# this copr is assigned to
- for chroot in copr.active_mock_chroots:
+ for chroot in copr.active_chroots:
buildchroot = models.BuildChroot(
build=build,
mock_chroot=chroot)
diff --git a/coprs_frontend/coprs/models.py b/coprs_frontend/coprs/models.py
index 5f733f3..0dbf7df 100644
--- a/coprs_frontend/coprs/models.py
+++ b/coprs_frontend/coprs/models.py
@@ -177,7 +177,7 @@ class Copr(db.Model, Serializer):
return md.convert(self.instructions) or 'Instructions not filled in by author. Author knows what to do. Everybody else should avoid this repo.'
@property
- def active_mock_chroots(self):
+ def active_chroots(self):
"""Returns list of active mock_chroots of this copr"""
return filter(lambda x: x.is_active, self.mock_chroots)
diff --git a/coprs_frontend/coprs/templates/coprs/detail/overview.html b/coprs_frontend/coprs/templates/coprs/detail/overview.html
index 7e2e0f8..d3bca61 100644
--- a/coprs_frontend/coprs/templates/coprs/detail/overview.html
+++ b/coprs_frontend/coprs/templates/coprs/detail/overview.html
@@ -20,10 +20,10 @@
<th>Architecture</th>
<th class="rightmost">Yum Repo</th>
</tr>
- {% 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 %}
+ {% for mock_chroot in copr.active_chroots %}
+ {% if loop.index < copr.active_chroots|length %}
+ {% if mock_chroot.os_release != copr.active_chroots[loop.index].os_release or
+ mock_chroot.os_version != copr.active_chroots[loop.index].os_version %}
{# next release is different => release-end #}
<tr class="release-end">
{% else %}
@@ -32,8 +32,8 @@
{% else %}{# last line => release-end for sure #}
<tr class="release-end">
{% endif %}
- {% 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
+ {% if mock_chroot.os_release != copr.active_chroots[loop.index0 - 1].os_release or
+ mock_chroot.os_version != copr.active_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>
@@ -41,8 +41,8 @@
<td></td>
{% endif %}
<td>{{ mock_chroot.arch }}</td>
- {% 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
+ {% if mock_chroot.os_release != copr.active_chroots[loop.index0 - 1].os_release or
+ mock_chroot.os_version != copr.active_chroots[loop.index0 - 1].os_version or
loop.index0 == 0 %}
{# previous os_release-os_version were different or this is the first one #}
<td><a href="{{ url_for(
diff --git a/coprs_frontend/coprs/templates/coprs/show.html b/coprs_frontend/coprs/templates/coprs/show.html
index 9f8abe7..2533171 100644
--- a/coprs_frontend/coprs/templates/coprs/show.html
+++ b/coprs_frontend/coprs/templates/coprs/show.html
@@ -31,7 +31,7 @@
<a class="coprs-list" 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|safe }}</p>
<p class="repos">
- {% for mock_chroot in copr.active_mock_chroots %}
+ {% for mock_chroot in copr.active_chroots %}
{{ mock_chroot.os_release|os_name_short(mock_chroot.os_version) }}.{{ mock_chroot.arch }}{% if not loop.last %}, {% endif %}
{% endfor %}
</p>
diff --git a/coprs_frontend/coprs/views/api_ns/api_general.py b/coprs_frontend/coprs/views/api_ns/api_general.py
index 550b007..0e931d0 100644
--- a/coprs_frontend/coprs/views/api_ns/api_general.py
+++ b/coprs_frontend/coprs/views/api_ns/api_general.py
@@ -124,7 +124,7 @@ def api_coprs_by_owner(username=None):
yum_repos = {}
for build in repo.builds:
if build.results:
- for chroot in repo.active_mock_chroots:
+ for chroot in repo.active_chroots:
release = '{chroot.os_release}-{chroot.os_version}-{chroot.arch}'.format(chroot=chroot)
yum_repos[release] = urlparse.urljoin(build.results, release + '/')
break
diff --git a/coprs_frontend/tests/coprs_test_case.py b/coprs_frontend/tests/coprs_test_case.py
index 8ff9c60..20110f6 100644
--- a/coprs_frontend/tests/coprs_test_case.py
+++ b/coprs_frontend/tests/coprs_test_case.py
@@ -121,7 +121,7 @@ class CoprsTestCase(object):
for build in [self.b1, self.b2, self.b3, self.b4]:
self.db.session.add(build)
- for chroot in build.copr.active_mock_chroots:
+ for chroot in build.copr.active_chroots:
buildchroot = models.BuildChroot(
build=build,
mock_chroot=chroot)
10 years, 4 months
[copr] new: remove useless comments (a7f30b0)
by Richard Marko
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : new
>---------------------------------------------------------------
commit a7f30b0e50f1506a14313687f49f50731803bda0
Author: Richard Marko <rmarko(a)fedoraproject.org>
Date: Tue Jan 21 13:42:35 2014 +0100
remove useless comments
Signed-off-by: Richard Marko <rmarko(a)fedoraproject.org>
>---------------------------------------------------------------
.../coprs/views/coprs_ns/coprs_builds.py | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py b/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
index 561fa61..d0e0763 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
@@ -18,7 +18,7 @@ from coprs.views.coprs_ns import coprs_ns
def copr_builds(username, coprname, page=1):
copr = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname).first()
- if not copr: # hey, this Copr doesn't exist
+ if not copr:
return page_not_found('Copr with name {0} does not exist.'.format(coprname))
builds_query = builds_logic.BuildsLogic.get_multiple(flask.g.user, copr=copr)
@@ -32,7 +32,7 @@ def copr_builds(username, coprname, page=1):
def copr_add_build(username, coprname, form=None):
copr = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname).first()
- if not copr: # hey, this Copr doesn't exist
+ if not copr:
return page_not_found('Copr with name {0} does not exist.'.format(coprname))
if not form:
@@ -46,7 +46,7 @@ def copr_add_build(username, coprname, form=None):
def copr_new_build(username, coprname):
form = forms.BuildForm()
copr = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname).first()
- if not copr: # hey, this Copr doesn't exist
+ if not copr:
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):
@@ -74,7 +74,7 @@ def copr_new_build(username, coprname):
def copr_cancel_build(username, coprname, build_id):
# only the user who ran the build can cancel it
build = builds_logic.BuildsLogic.get(build_id).first()
- if not build: # hey, this Build doesn't exist
+ if not build:
return page_not_found('Build with id {0} does not exist.'.format(build_id))
try:
builds_logic.BuildsLogic.cancel_build(flask.g.user, build)
@@ -93,10 +93,10 @@ def copr_repeat_build(username, coprname, build_id):
build = builds_logic.BuildsLogic.get(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
+ if not build:
return page_not_found('Build with id {0} does not exist.'.format(build_id))
- if not copr: # hey, this Copr doesn't exist
+ if not copr:
return page_not_found('Copr {0}/{1} does not exist.'.format(username, coprname))
# TODO: do intersection of chroots with currently active?
10 years, 4 months
[copr] new: [frontend] allow resubmitting builds from monitor (3b75ef0)
by Richard Marko
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : new
>---------------------------------------------------------------
commit 3b75ef02f36b96b5976354a145422ad3248cafe6
Author: Richard Marko <rmarko(a)fedoraproject.org>
Date: Tue Jan 21 13:46:25 2014 +0100
[frontend] allow resubmitting builds from monitor
Signed-off-by: Richard Marko <rmarko(a)fedoraproject.org>
>---------------------------------------------------------------
.../coprs/templates/coprs/detail/monitor.html | 13 +++++++++++--
.../coprs/views/coprs_ns/coprs_general.py | 6 +++---
2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/coprs_frontend/coprs/templates/coprs/detail/monitor.html b/coprs_frontend/coprs/templates/coprs/detail/monitor.html
index dea1c1c..a2d9ab6 100644
--- a/coprs_frontend/coprs/templates/coprs/detail/monitor.html
+++ b/coprs_frontend/coprs/templates/coprs/detail/monitor.html
@@ -20,8 +20,17 @@
{% for package, states in packages %}
<tr>
<td>{{ package }}</td>
- {% for state in states %}
- <td class="centered build-{{ state }}">{{ state }}</td>
+ {% for build_id, state in states %}
+ <td class="centered build-{{ state }}">
+ {% if state %}
+ {{ state }}
+ {% else %}
+ <a href="{{ url_for('coprs_ns.copr_repeat_build',
+ username=copr.owner.name,
+ coprname=copr.name,
+ build_id=build_id) }}">resubmit</a>
+ {% endif %}
+ </td>
{% endfor %}
</tr>
{% endfor %}
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index c103401..21705b9 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -368,7 +368,7 @@ def copr_build_monitor(username, coprname):
# the only reason why this is necessary is non-existent
# database design
#
- # loop goes through last 50 builds trying to approximate
+ # loop goes through builds trying to approximate
# per-package results based on previous builds
# - it can't determine build results if build contains
# more than one package as this data is not available
@@ -391,9 +391,9 @@ def copr_build_monitor(username, coprname):
build_results = []
for chroot_name in chroots:
if chroot_name in chroot_results:
- build_results.append(chroot_results[chroot_name])
+ build_results.append((build.id, chroot_results[chroot_name]))
else:
- build_results.append('not submitted yet')
+ build_results.append((build.id, None))
for pkg_url in build.pkgs.split():
pkg = os.path.basename(pkg_url)
10 years, 4 months