[copr] master: [backend] shell command uses pipes.quote (b7ede77)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit b7ede771b97337132b0a18e28ef43c9c34d1f284
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Mon Jul 14 14:08:37 2014 +0200
[backend] shell command uses pipes.quote
>---------------------------------------------------------------
backend/backend/mockremote.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/backend/backend/mockremote.py b/backend/backend/mockremote.py
index 84dcd3b..ea68f05 100755
--- a/backend/backend/mockremote.py
+++ b/backend/backend/mockremote.py
@@ -469,7 +469,7 @@ class Builder(object):
self.mockremote.callback.log("Listing built binary packages")
self.conn.module_name = "shell"
- self.conn.module_args = "cd \"{0}\" && for f in `ls *.rpm | grep -v \"src.rpm$\"`; do rpm -qp --qf \"%{{NAME}} %{{VERSION}}\n\" $f; done".format(self._get_remote_pkg_dir(pkg))
+ self.conn.module_args = pipes.quote("cd {0} && for f in `ls *.rpm | grep -v \"src.rpm$\"`; do rpm -qp --qf \"%{{NAME}} %{{VERSION}}\n\" $f; done".format(self._get_remote_pkg_dir(pkg)))
results = self.conn.run()
build_details["built_packages"] = results["contacted"].itervalues().next()[u"stdout"]
self.mockremote.callback.log("Packages:\n"+build_details["built_packages"])
9 years, 9 months
[copr] master: Return the chroot that finished when sending build.end (3bfdab4)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 3bfdab49bb10b5ec0b7d7bbb0f58a3734be1118a
Author: Pierre-Yves Chibon <pingou(a)pingoured.fr>
Date: Fri Jul 11 13:54:47 2014 +0200
Return the chroot that finished when sending build.end
>---------------------------------------------------------------
backend/backend/dispatcher.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/backend/backend/dispatcher.py b/backend/backend/dispatcher.py
index 9ee0321..94d8b8d 100644
--- a/backend/backend/dispatcher.py
+++ b/backend/backend/dispatcher.py
@@ -547,7 +547,7 @@ class Worker(multiprocessing.Process):
content = dict(user=job.user_name, copr=job.copr_name,
build=job.build_id, ip=ip, pid=self.pid,
- status=job.status)
+ status=job.status, chroot=job.chroot)
self.event("build.end", template, content)
finally:
9 years, 9 months
[copr] master: small changes after review (5cc661d)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 5cc661d3693610c4ffa45137d7ebcfb53b07474d
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Mon Jul 14 12:59:07 2014 +0200
small changes after review
>---------------------------------------------------------------
backend/backend/mockremote.py | 2 +-
backend/copr-be.conf.example | 8 ++++----
backend/copr-be.py | 6 +++---
.../coprs_frontend/coprs/logic/builds_logic.py | 1 -
4 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/backend/backend/mockremote.py b/backend/backend/mockremote.py
index 203a9fb..84dcd3b 100755
--- a/backend/backend/mockremote.py
+++ b/backend/backend/mockremote.py
@@ -469,7 +469,7 @@ class Builder(object):
self.mockremote.callback.log("Listing built binary packages")
self.conn.module_name = "shell"
- self.conn.module_args = "cd {0} && for f in `ls *.rpm | grep -v \"src.rpm$\"`; do rpm -qp --qf \"%{{NAME}} %{{VERSION}}\n\" $f; done".format(self._get_remote_pkg_dir(pkg))
+ self.conn.module_args = "cd \"{0}\" && for f in `ls *.rpm | grep -v \"src.rpm$\"`; do rpm -qp --qf \"%{{NAME}} %{{VERSION}}\n\" $f; done".format(self._get_remote_pkg_dir(pkg))
results = self.conn.run()
build_details["built_packages"] = results["contacted"].itervalues().next()[u"stdout"]
self.mockremote.callback.log("Packages:\n"+build_details["built_packages"])
diff --git a/backend/copr-be.conf.example b/backend/copr-be.conf.example
index cee2427..9ca876d 100644
--- a/backend/copr-be.conf.example
+++ b/backend/copr-be.conf.example
@@ -23,9 +23,9 @@ architectures=i386,x86_64
# example for i386:
# spawn_playbook-i386=/etc/copr/builder_playbook-i386.yml
# defaults are: (also automatically generated for each architecture above)
-# spawn_playbook-i386=/etc/copr/builder_playbook-i386.yml
-# spawn_playbook-x86_64=/etc/copr/builder_playbook-x86_64.yml
-# spawn_playbook-ANY_ARCH=/etc/copr/builder_playbook-ANY_ARCH.yml
+# spawn_playbook-i386=/srv/copr-work/provision/builderpb-i386.yml
+# spawn_playbook-x86_64=/srv/copr-work/provision/builderpb-x86_64.yml
+# spawn_playbook-ANY_ARCH=/srv/copr-work/provision/builderpb-ANY_ARCH.yml
spawn_playbook-i386=/srv/copr-work/provision/builderpb-i386.yml
spawn_playbook-x86_64=/srv/copr-work/provision/builderpb-x86_64.yml
@@ -41,7 +41,7 @@ spawn_playbook-x86_64=/srv/copr-work/provision/builderpb-x86_64.yml
#spawn_vars=chroot
# path to ansible playbook which terminate builder
-# default is /etc/copr/terminate_playbook.yml
+# default is /srv/copr-work/provision/terminatepb.yml
terminate_playbook=/srv/copr-work/provision/terminatepb.yml
# The same option as 'spawn_vars' above, except that variables will be send to
diff --git a/backend/copr-be.py b/backend/copr-be.py
index 7b10485..83c26f2 100755
--- a/backend/copr-be.py
+++ b/backend/copr-be.py
@@ -223,17 +223,17 @@ class CoprBackend(object):
cp, "backend", "frontend_auth", "PASSWORDHERE")
opts.architectures = _get_conf(
- cp, "backend", "architectures", "i386 x86_64").split(",")
+ cp, "backend", "architectures", "i386,x86_64").split(",")
opts.spawn_playbook = {}
for arch in opts.architectures:
opts.spawn_playbook[arch] = _get_conf(
cp, "backend", "spawn_playbook-{0}".format(arch),
- "/etc/copr/builder_playbook-{0}.yml".format(arch))
+ "/srv/copr-work/provision/builderpb-{0}.yml".format(arch))
opts.terminate_playbook = _get_conf(
cp, "backend", "terminate_playbook",
- "/etc/copr/terminate_playbook.yml")
+ "/srv/copr-work/provision/terminatepb.yml")
opts.jobsdir = _get_conf(cp, "backend", "jobsdir", None)
opts.destdir = _get_conf(cp, "backend", "destdir", None)
diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py b/frontend/coprs_frontend/coprs/logic/builds_logic.py
index 625cd66..60e1826 100644
--- a/frontend/coprs_frontend/coprs/logic/builds_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py
@@ -175,7 +175,6 @@ class BuildsLogic(object):
build.copr.name),
data=build.pkgs,
created_on=int(time.time()))
-
db.session.add(action)
for build_chroot in build.build_chroots:
9 years, 9 months
[copr] master: better and safer deleting of builds (d5cfb69)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit d5cfb691babe854e459cc478ae4e25cbc29c57f1
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Thu Jul 10 13:59:56 2014 +0200
better and safer deleting of builds
>---------------------------------------------------------------
backend/backend/actions.py | 43 ++++++++++++-------
.../coprs_frontend/coprs/logic/builds_logic.py | 12 ++++--
frontend/coprs_frontend/coprs/models.py | 14 ++++++
.../templates/coprs/detail/_builds_forms.html | 2 +-
frontend/coprs_frontend/tests/coprs_test_case.py | 6 ++-
.../test_views/test_coprs_ns/test_coprs_builds.py | 3 +-
6 files changed, 56 insertions(+), 24 deletions(-)
diff --git a/backend/backend/actions.py b/backend/backend/actions.py
index 180e778..0600723 100644
--- a/backend/backend/actions.py
+++ b/backend/backend/actions.py
@@ -36,7 +36,9 @@ class Action(object):
self.event("Removing copr {0}".format(path))
shutil.rmtree(path)
- elif self.data["object_type"] == "build":
+ elif self.data["object_type"] in ["build-succeeded",
+ "build-skipped",
+ "build-failed"]:
self.event("Action delete build")
project = self.data["old_value"]
packages = map(lambda x:
@@ -57,22 +59,31 @@ class Action(object):
self.event("In chroot {0}".format(chroot))
altered = False
+ # We need to delete the files only if they belong
+ # to the build. For example if my build fails and I send
+ # fixed pkg with the same version again, it succeeds and
+ # than I delete the failed, it would delete the succeeded
+ # files as well - that would be wrong.
for pkg in packages:
- pkg_path = os.path.join(path, chroot, pkg)
- if os.path.isdir(pkg_path):
- self.event("Removing build {0}".format(pkg_path))
- shutil.rmtree(pkg_path)
- altered = True
- else:
- self.event("Package {0} dir not found in chroot {1}"
- .format(pkg, chroot))
-
- if altered:
- self.event("Running createrepo")
- _, _, err = createrepo(os.path.join(path, chroot), self.lock)
- if err.strip():
- self.event(
- "Error making local repo: {0}".format(err))
+ if self.data["object_type"] == "build-succeeded" or \
+ (self.data["object_type"] == "build-failed" and
+ os.path.exists(os.path.join(path, chroot, pkg, "fail"))):
+ pkg_path = os.path.join(path, chroot, pkg)
+ if os.path.isdir(pkg_path):
+ self.event("Removing build {0}".format(pkg_path))
+ shutil.rmtree(pkg_path)
+ altered = True
+ else:
+ self.event(
+ "Package {0} dir not found in chroot {1}"
+ .format(pkg, chroot))
+
+ if altered:
+ self.event("Running createrepo")
+ _, _, err = createrepo(os.path.join(path, chroot), self.lock)
+ if err.strip():
+ self.event(
+ "Error making local repo: {0}".format(err))
log_path = os.path.join(
path, chroot,
diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py b/frontend/coprs_frontend/coprs/logic/builds_logic.py
index 47db86f..625cd66 100644
--- a/frontend/coprs_frontend/coprs/logic/builds_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py
@@ -160,13 +160,16 @@ class BuildsLogic(object):
raise exceptions.InsufficientRightsException(
"You are not allowed to delete this build.")
- if build.state == "running":
+ if not build.deletable:
raise exceptions.ActionInProgressException(
- "You can not delete build which is running.", "Running build")
+ "You can not delete build which is not finished.",
+ "Unfinished build")
- if build.state != "failed":
+ # Only failed (and finished), succeeded, skipped and cancelled get here.
+ if build.state != "cancelled": #has nothing in backend to delete
+ object_type = "build-{0}".format(build.state)
action = models.Action(action_type=helpers.ActionTypeEnum("delete"),
- object_type="build",
+ object_type=object_type,
object_id=build.id,
old_value="{0}/{1}".format(build.copr.owner.name,
build.copr.name),
@@ -174,6 +177,7 @@ class BuildsLogic(object):
created_on=int(time.time()))
db.session.add(action)
+
for build_chroot in build.build_chroots:
db.session.delete(build_chroot)
db.session.delete(build)
diff --git a/frontend/coprs_frontend/coprs/models.py b/frontend/coprs_frontend/coprs/models.py
index c199902..ffb7009 100644
--- a/frontend/coprs_frontend/coprs/models.py
+++ b/frontend/coprs_frontend/coprs/models.py
@@ -319,6 +319,20 @@ class Build(db.Model, helpers.Serializer):
return self.status != helpers.StatusEnum("pending")
+ @property
+ def deletable(self):
+ """
+ Find out if this build is deletable.
+
+ Build is deletable only when it's finished. (also means cancelled)
+ It is important to remember that "failed" state doesn't ultimately
+ mean it's finished - so we need to check whether the "ended_on"
+ property has been set.
+ """
+
+ return self.state in ["succeeded", "canceled", "skipped"] or \
+ (self.state == "failed" and self.ended_on is not None)
+
class MockChroot(db.Model, helpers.Serializer):
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_forms.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_forms.html
index 2573643..0fdf872 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_forms.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_forms.html
@@ -65,7 +65,7 @@
{% endmacro %}
{% macro copr_build_delete_form(build, page) %}
- {% if build.ended_on and build.state != "running" %}
+ {% if build.deletable %}
<form action="{{ url_for('coprs_ns.copr_delete_build', username=build.copr.owner.name, coprname=build.copr.name, build_id=build.id)}}" method="post">
<input type="hidden" value="page" value="{{ page }}">
<input type="submit" value="Delete">
diff --git a/frontend/coprs_frontend/tests/coprs_test_case.py b/frontend/coprs_frontend/tests/coprs_test_case.py
index 313cef7..179555c 100644
--- a/frontend/coprs_frontend/tests/coprs_test_case.py
+++ b/frontend/coprs_frontend/tests/coprs_test_case.py
@@ -121,10 +121,14 @@ class CoprsTestCase(object):
for build in [self.b1, self.b2, self.b3, self.b4]:
self.db.session.add(build)
+ status = None
+ if build is self.b1: # this build is going to be deleted
+ status = 1 # succeeded
for chroot in build.copr.active_chroots:
buildchroot = models.BuildChroot(
build=build,
- mock_chroot=chroot)
+ mock_chroot=chroot,
+ status = status)
self.db.session.add(buildchroot)
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 dab7a94..cfd2bae 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
@@ -110,14 +110,13 @@ class TestCoprDeleteBuild(CoprsTestCase):
.format(self.u1.name, self.c1.name, self.b1.id),
data={},
follow_redirects=True)
-
assert "Build was deleted" in r.data
b = (self.models.Build.query.filter(
self.models.Build.id == self.b1.id)
.first())
assert b is None
act = self.models.Action.query.first()
- assert act.object_type == "build"
+ assert act.object_type == "build-succeeded"
assert act.old_value == "user1/foocopr"
assert act.data == pkgs
9 years, 9 months
[copr] master: [frontend] build's ended_on time fix (335e5a0)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 335e5a0d018d5c88f8cdb8415030b4ce801e8800
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Thu Jul 10 13:01:55 2014 +0200
[frontend] build's ended_on time fix
>---------------------------------------------------------------
.../coprs_frontend/coprs/logic/builds_logic.py | 8 ++++----
frontend/coprs_frontend/coprs/models.py | 5 +++++
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py b/frontend/coprs_frontend/coprs/logic/builds_logic.py
index c4c2cab..47db86f 100644
--- a/frontend/coprs_frontend/coprs/logic/builds_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py
@@ -132,10 +132,10 @@ class BuildsLogic(object):
if attr == "started_on" and build.started_on:
continue
- # only update ended_on and results
- # when there are no pending builds
- if (attr in ["ended_on", "results"] and
- build.has_pending_chroot):
+ # update ended_on when everything really ends
+ # update results when there is repo initialized for every chroot
+ if (attr == "ended_on" and build.has_unfinished_chroot) or \
+ (attr == "results" and build.has_pending_chroot):
continue
if attr == "ended_on":
diff --git a/frontend/coprs_frontend/coprs/models.py b/frontend/coprs_frontend/coprs/models.py
index 25fc043..c199902 100644
--- a/frontend/coprs_frontend/coprs/models.py
+++ b/frontend/coprs_frontend/coprs/models.py
@@ -270,6 +270,11 @@ class Build(db.Model, helpers.Serializer):
return helpers.StatusEnum("pending") in self.chroot_states
@property
+ def has_unfinished_chroot(self):
+ return helpers.StatusEnum("pending") in self.chroot_states or \
+ helpers.StatusEnum("running") in self.chroot_states
+
+ @property
def status(self):
"""
Return build status according to build status of its chroots
9 years, 9 months
[copr] fedora-21: frontend: add f21 chroot (3fa58dc)
by Igor Gnatenko
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : fedora-21
>---------------------------------------------------------------
commit 3fa58dcd8c7ec0b8b0caeb9d91ca03bc8f263bb3
Author: Igor Gnatenko <i.gnatenko.brain(a)gmail.com>
Date: Sat Jul 12 22:34:02 2014 +0400
frontend: add f21 chroot
Signed-off-by: Igor Gnatenko <i.gnatenko.brain(a)gmail.com>
>---------------------------------------------------------------
frontend/coprs_frontend/coprs/constants.py | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/constants.py b/frontend/coprs_frontend/coprs/constants.py
index a0709e0..e475845 100644
--- a/frontend/coprs_frontend/coprs/constants.py
+++ b/frontend/coprs_frontend/coprs/constants.py
@@ -7,6 +7,7 @@ CHROOTS = {
"fedora-18": DEFAULT_ARCHES,
"fedora-19": DEFAULT_ARCHES,
"fedora-20": DEFAULT_ARCHES,
+ "fedora-21": DEFAULT_ARCHES,
"fedora-rawhide": DEFAULT_ARCHES,
"epel-5": DEFAULT_ARCHES,
"epel-6": DEFAULT_ARCHES,
9 years, 10 months
[copr] master: [backend] separate playbooks for each architecture (e5dfc98)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit e5dfc985d2b848209d5f6696c40b4e6790fc0bef
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Wed Jul 9 10:21:18 2014 +0200
[backend] separate playbooks for each architecture
>---------------------------------------------------------------
backend/backend/dispatcher.py | 8 +++++++-
backend/copr-be.conf.example | 18 +++++++++++++++---
backend/copr-be.py | 11 ++++++++---
backend/playbooks/builderpb-i386.yml | 1 +
.../{builderpb.yml => builderpb-x86_64.yml} | 0
5 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/backend/backend/dispatcher.py b/backend/backend/dispatcher.py
index 28ce803..9ee0321 100644
--- a/backend/backend/dispatcher.py
+++ b/backend/backend/dispatcher.py
@@ -218,8 +218,14 @@ class Worker(multiprocessing.Process):
if i == 'chroot':
extra_vars['chroot'] = job['chroot']
+ arch = job['chroot'].split("-")[2]
+ try:
+ spawn_playbook = self.opts.spawn_playbook[arch]
+ except KeyError:
+ return None
+
args = "-c ssh {0} {1}".format(
- self.opts.spawn_playbook,
+ spawn_playbook,
ans_extra_vars_encode(extra_vars, "copr_task"))
result = self.run_ansible_playbook(args, "spawning instance")
diff --git a/backend/copr-be.conf.example b/backend/copr-be.conf.example
index cfcc2b1..cee2427 100644
--- a/backend/copr-be.conf.example
+++ b/backend/copr-be.conf.example
@@ -12,10 +12,22 @@ frontend_url=http://copr-fe.cloud.fedoraproject.org/backend
# default is PASSWORDHERE but you really should change it. really.
frontend_auth=backend_password_from_fe_config
-# path to ansible playbook which spawns builder
+# comma-separated architectures
+# default is i386,x86_64
+architectures=i386,x86_64
+
+# paths to ansible playbooks which spawns builder
# see /usr/share/copr*/playbooks/ for examples
-# default is /etc/copr/builder_playbook.yml
-spawn_playbook=/srv/copr-work/provision/builderpb.yml
+# you need to specify an extra variable with playbook
+# for each architecture above as spawn_playbook-arch=PATH
+# example for i386:
+# spawn_playbook-i386=/etc/copr/builder_playbook-i386.yml
+# defaults are: (also automatically generated for each architecture above)
+# spawn_playbook-i386=/etc/copr/builder_playbook-i386.yml
+# spawn_playbook-x86_64=/etc/copr/builder_playbook-x86_64.yml
+# spawn_playbook-ANY_ARCH=/etc/copr/builder_playbook-ANY_ARCH.yml
+spawn_playbook-i386=/srv/copr-work/provision/builderpb-i386.yml
+spawn_playbook-x86_64=/srv/copr-work/provision/builderpb-x86_64.yml
# What variables will be send to spawn_playbook. Expects comma separated list
# of keywords. For example 'spawn_vars=chroot' will create
diff --git a/backend/copr-be.py b/backend/copr-be.py
index fd7c01e..7b10485 100755
--- a/backend/copr-be.py
+++ b/backend/copr-be.py
@@ -222,9 +222,14 @@ class CoprBackend(object):
opts.frontend_auth = _get_conf(
cp, "backend", "frontend_auth", "PASSWORDHERE")
- opts.spawn_playbook = _get_conf(
- cp, "backend", "spawn_playbook",
- "/etc/copr/builder_playbook.yml")
+ opts.architectures = _get_conf(
+ cp, "backend", "architectures", "i386 x86_64").split(",")
+
+ opts.spawn_playbook = {}
+ for arch in opts.architectures:
+ opts.spawn_playbook[arch] = _get_conf(
+ cp, "backend", "spawn_playbook-{0}".format(arch),
+ "/etc/copr/builder_playbook-{0}.yml".format(arch))
opts.terminate_playbook = _get_conf(
cp, "backend", "terminate_playbook",
diff --git a/backend/playbooks/builderpb-i386.yml b/backend/playbooks/builderpb-i386.yml
new file mode 120000
index 0000000..b2162bd
--- /dev/null
+++ b/backend/playbooks/builderpb-i386.yml
@@ -0,0 +1 @@
+builderpb-x86_64.yml
\ No newline at end of file
diff --git a/backend/playbooks/builderpb.yml b/backend/playbooks/builderpb-x86_64.yml
similarity index 100%
rename from backend/playbooks/builderpb.yml
rename to backend/playbooks/builderpb-x86_64.yml
9 years, 10 months
[copr] master: [frontend] built pkgs info - include subpackages (7cf5b31)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 7cf5b31df2d6ae79bede909f43214f7ec329cf8b
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Tue Jul 8 13:51:46 2014 +0200
[frontend] built pkgs info - include subpackages
>---------------------------------------------------------------
.../coprs_frontend/coprs/logic/builds_logic.py | 2 +-
frontend/coprs_frontend/coprs/models.py | 6 +++---
frontend/coprs_frontend/coprs/templates/api.html | 12 ++++++++----
.../coprs/templates/coprs/detail/build.html | 16 +++++-----------
.../coprs/views/api_ns/api_general.py | 8 ++++++--
5 files changed, 23 insertions(+), 21 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py b/frontend/coprs_frontend/coprs/logic/builds_logic.py
index 60b5bfb..c4c2cab 100644
--- a/frontend/coprs_frontend/coprs/logic/builds_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py
@@ -125,7 +125,7 @@ class BuildsLogic(object):
db.session.add(build_chroot)
- for attr in ["results", "started_on", "ended_on", "pkg_version", "pkg_name"]:
+ for attr in ["results", "started_on", "ended_on", "pkg_version", "built_packages"]:
value = upd_dict.get(attr, None)
if value:
# only update started_on once
diff --git a/frontend/coprs_frontend/coprs/models.py b/frontend/coprs_frontend/coprs/models.py
index 053b70b..25fc043 100644
--- a/frontend/coprs_frontend/coprs/models.py
+++ b/frontend/coprs_frontend/coprs/models.py
@@ -233,9 +233,9 @@ class Build(db.Model, helpers.Serializer):
id = db.Column(db.Integer, primary_key=True)
# list of space separated urls of packages to build
pkgs = db.Column(db.Text)
- # the real name of the package got by rpm
- pkg_name = db.Column(db.Text)
- # version of the package got by rpm
+ # built packages
+ built_packages = db.Column(db.Text)
+ # version of the srpm package got by rpm
pkg_version = db.Column(db.Text)
# was this build canceled by user?
canceled = db.Column(db.Boolean, default=False)
diff --git a/frontend/coprs_frontend/coprs/templates/api.html b/frontend/coprs_frontend/coprs/templates/api.html
index aefb175..c9c27fa 100644
--- a/frontend/coprs_frontend/coprs/templates/api.html
+++ b/frontend/coprs_frontend/coprs/templates/api.html
@@ -281,8 +281,8 @@ copr_url = https://copr.fedoraproject.org
<li><b>project</b> – Name of the project.</li>
<li><b>owner</b> – Name of the owner.</li>
<li><b>results</b>– URL with the results.</li>
- <li><b>pkg_name</b>– Name of the built package.</li>
- <li><b>pkg_version</b>– Version of the built package.</li>
+ <li><b>built_pkgs</b>– List of built packages.</li>
+ <li><b>src_version</b>– Version of the source package.</li>
<li><b>chroots</b>– Chroots in which the package has been build and their build states.</li>
<li><b>submitted_on</b>– Datetime when the build was submitted. (in epoch format) </li>
<li><b>started_on</b>– Datetime when the build process started. (in epoch format)</li>
@@ -298,8 +298,12 @@ copr_url = https://copr.fedoraproject.org
"project": "myproject",
"owner": "msuchy",
"results": "http://copr-be.cloud.fedoraproject.org/results/msuchy/myproject/",
- "pkg_name": "hello",
- "pkg_version": "2.8",
+ "built_pkgs": [
+ "hello 2.8",
+ "hello-gui 2.8",
+ "super-lib 5.4"
+ ],
+ "src_version": "2.8",
"chroots": {
"fedora-20-i386": "succeeded",
"fedora-20-x86_64": "succeeded"
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/build.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/build.html
index ad012de..df826a7 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/build.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/build.html
@@ -36,17 +36,11 @@
{% endif %}
</div>
<div>
- <dt class="oneline"> Name:</dt>
- {% if build.pkg_name %}
- <dd>{{ build.pkg_name }}</dd>
- {% else %}
- <dd> - </dd>
- {% endif %}
-
-
- <dt class="oneline"> Version:</dt>
- {% if build.pkg_version %}
- <dd>{{ build.pkg_version }}</dd>
+ <dt> Built packages:</dt>
+ {% if build.built_packages %}
+ {% for pkg in build.built_packages.split("\n"): %}
+ <dd>{{ pkg }}</dd>
+ {% endfor %}
{% else %}
<dd> - </dd>
{% endif %}
diff --git a/frontend/coprs_frontend/coprs/views/api_ns/api_general.py b/frontend/coprs_frontend/coprs/views/api_ns/api_general.py
index fb20602..a665332 100644
--- a/frontend/coprs_frontend/coprs/views/api_ns/api_general.py
+++ b/frontend/coprs_frontend/coprs/views/api_ns/api_general.py
@@ -330,13 +330,17 @@ def build_detail(build_id):
for chroot in build.build_chroots:
chroots[chroot.name] = chroot.state
+ built_packages = None
+ if build.built_packages:
+ built_packages = build.built_packages.split("\n")
+
output = {"output": "ok",
"status": build.state,
"project": build.copr.name,
"owner": build.copr.owner.name,
"results": build.results,
- "pkg_name": build.pkg_name,
- "pkg_version": build.pkg_version,
+ "built_pkgs": built_packages,
+ "src_version": build.pkg_version,
"chroots": chroots,
"submitted_on": build.submitted_on,
"started_on": build.started_on,
9 years, 10 months