[copr] master: building pkgs separately (4e04de0)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 4e04de0f790365d4400c804920ef09f1979275de
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Thu Mar 20 11:48:29 2014 +0100
building pkgs separately
>---------------------------------------------------------------
cli/copr_cli/subcommands.py | 48 +++++++++++---------
.../coprs/views/api_ns/api_general.py | 34 +++++++++-----
.../coprs/views/coprs_ns/coprs_builds.py | 14 +++---
.../coprs/views/coprs_ns/coprs_general.py | 11 +++--
4 files changed, 62 insertions(+), 45 deletions(-)
diff --git a/cli/copr_cli/subcommands.py b/cli/copr_cli/subcommands.py
index 5b99e80..e83d474 100644
--- a/cli/copr_cli/subcommands.py
+++ b/cli/copr_cli/subcommands.py
@@ -236,29 +236,35 @@ def build(copr, pkgs, memory, timeout, wait=True, result=None):
print(output["message"])
if wait:
- print("Build ID: {0}".format(output["id"]))
- print("Watching build (this may be safely interrupted)...")
- prevstatus = None
- if result is not None:
- result['id'] = output["id"]
+ print("{0} builds were added.".format(len(output["ids"])))
+ print("Watching builds (this may be safely interrupted)...")
+ prevstatus = {}
+ for id in output["ids"]:
+ prevstatus[id] = None
+ if result is not None:
+ result[id] = {}
try:
while True:
- (ret, status) = _fetch_status(output["id"])
- if not ret:
- errmsg = "Unable to get build status: {0}".format(status)
- print errmsg
- if result is not None:
- result['errmsg'] = errmsg
- return False
-
- now = datetime.datetime.now()
- if prevstatus != status:
- print("{0} {1}".format(now.strftime("%H:%M:%S"), status))
- prevstatus = status
-
- if status in ["succeeded", "failed"]:
- if result is not None:
- result['status'] = status
+ for id in output["ids"]:
+ (ret, status) = _fetch_status(id)
+ if not ret:
+ errmsg = "Build {1}: Unable to get build status: {0}".format(status,id)
+ print errmsg
+ if result is not None:
+ result[id]['errmsg'] = errmsg
+ return False
+
+ now = datetime.datetime.now()
+ if prevstatus[id] != status:
+ print("{0} Build {2}: {1}".format(now.strftime("%H:%M:%S"), status, id))
+ prevstatus[id] = status
+
+ if status in ["succeeded", "failed"]:
+ if result is not None:
+ result[id]['status'] = status
+ output["ids"].remove(id)
+
+ if not output["ids"]:
return True
time.sleep(60)
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 7ad8987..8334776 100644
--- a/frontend/coprs_frontend/coprs/views/api_ns/api_general.py
+++ b/frontend/coprs_frontend/coprs/views/api_ns/api_general.py
@@ -82,10 +82,12 @@ def api_new_copr(username):
infos.append("New project was successfully created.")
if form.initial_pkgs.data:
- builds_logic.BuildsLogic.add(
- user=flask.g.user,
- pkgs=" ".join(form.initial_pkgs.data.split()),
- copr=copr)
+ pkgs = form.initial_pkgs.data.split()
+ for pkg in pkgs:
+ builds_logic.BuildsLogic.add(
+ user=flask.g.user,
+ pkgs=pkg,
+ copr=copr)
infos.append("Initial packages were successfully "
"submitted for building.")
@@ -208,19 +210,25 @@ def copr_new_build(username, coprname):
else:
if form.validate_on_submit() and flask.g.user.can_build_in(copr):
# we're checking authorization above for now
- build = builds_logic.BuildsLogic.add(
- user=flask.g.user,
- pkgs=form.pkgs.data.replace('\n', ' '),
- copr=copr)
+ # and also creating separate build for each package
+ pkgs=form.pkgs.data.replace('\n', ' ').split(" ")
+ ids = []
+ for pkg in pkgs:
+ build = builds_logic.BuildsLogic.add(
+ user=flask.g.user,
+ pkgs=pkg,
+ copr=copr)
- if flask.g.user.proven:
- build.memory_reqs = form.memory_reqs.data
- build.timeout = form.timeout.data
+ if flask.g.user.proven:
+ build.memory_reqs = form.memory_reqs.data
+ build.timeout = form.timeout.data
+
+ db.session.commit()
+ ids.append(build.id)
- db.session.commit()
output = {"output": "ok",
- "id": build.id,
+ "ids": ids,
"message": "Build was added to {0}.".format(coprname)}
else:
output = {"output": "notok", "error": "Invalid request"}
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 dbcc3dd..8231050 100644
--- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
+++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_builds.py
@@ -63,13 +63,13 @@ def copr_new_build(username, coprname):
if form.validate_on_submit():
try:
- build = builds_logic.BuildsLogic.add(user=flask.g.user,
- pkgs=form.pkgs.data.replace(
- "\n", " "),
- copr=copr)
- if flask.g.user.proven:
- build.memory_reqs = form.memory_reqs.data
- build.timeout = form.timeout.data
+ pkgs = pkgs=form.pkgs.data.replace("\n", " ").split(" ")
+ for pkg in pkgs:
+ build = builds_logic.BuildsLogic.add(user=flask.g.user,
+ pkgs=pkg, copr=copr)
+ 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))
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 cf56e12..f29c590 100644
--- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -118,10 +118,13 @@ def copr_new(username):
flask.flash("New project was successfully created.")
if form.initial_pkgs.data:
- builds_logic.BuildsLogic.add(
- flask.g.user,
- pkgs=form.initial_pkgs.data.replace("\n", " "),
- copr=copr)
+ # 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 "