Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
commit 480cc52cd3ebf59af9154b6a9a47f4b526dc549c Author: Valentin Gologuzov vgologuz@redhat.com Date: Tue Nov 25 17:17:57 2014 +0100
[backend] small bug in dispatcher
backend/backend/dispatcher.py | 15 +++---- backend/backend/job.py | 2 + backend/backend/mockremote/__init__.py | 5 ++- backend/run/copr_mockremote.py | 2 +- backend/tests/mockremote/test_mockremote.py | 4 +- backend/tests/test_createrepo.py | 10 +---- backend/tests/test_dispatcher.py | 57 +++++++++++++++++++++++++++ 7 files changed, 74 insertions(+), 21 deletions(-)
diff --git a/backend/backend/dispatcher.py b/backend/backend/dispatcher.py index 1dc4614..c267941 100644 --- a/backend/backend/dispatcher.py +++ b/backend/backend/dispatcher.py @@ -417,17 +417,16 @@ class Worker(multiprocessing.Process): return response
@classmethod - def pkg_built_before(cls, pkgs, chroot, destdir): + def pkg_built_before(cls, pkg, chroot, destdir): """ Check whether the package has already been built in this chroot. """ - s_pkg = os.path.basename(pkgs[0]) + s_pkg = os.path.basename(pkg) pdn = s_pkg.replace(".src.rpm", "") resdir = "{0}/{1}/{2}".format(destdir, chroot, pdn) resdir = os.path.normpath(resdir) - if os.path.exists(resdir): - if os.path.exists(os.path.join(resdir, "success")): - return True + if os.path.exists(resdir) and os.path.exists(os.path.join(resdir, "success")): + return True return False
def __spawn_with_check(self, job): @@ -494,11 +493,11 @@ class Worker(multiprocessing.Process): "failed to initialize fedmsg: {0}".format(e))
# Checking whether to build or skip - if self.pkg_built_before(job.pkgs, job.chroot, job.destdir): + if self.pkg_built_before(job.pkg, job.chroot, job.destdir): self._announce_start(job) self.callback.log( "Skipping: package {0} has been already built before." - .format(' '.join(job.pkgs))) + .format(' '.join(job.pkg)))
job.status = 5 # skipped self._announce_end(job) @@ -584,7 +583,7 @@ class Worker(multiprocessing.Process): # results_base_url=self.opts.results_baseurl )
- build_details = mr.build_pkgs() + build_details = mr.build_pkg()
if self.opts.do_sign: mr.add_pubkey() diff --git a/backend/backend/job.py b/backend/backend/job.py index 1f5b1b1..9ce7b22 100644 --- a/backend/backend/job.py +++ b/backend/backend/job.py @@ -47,6 +47,8 @@ class BuildJob(object): setattr(self, key, val)
self.pkg = task_data["pkgs"].split(" ")[0] # just for now + del self.pkgs # better to produce error, than use it blindly + self.repos = [r for r in task_data["repos"].split(" ") if r.strip()] self.build_id = task_data["build_id"]
diff --git a/backend/backend/mockremote/__init__.py b/backend/backend/mockremote/__init__.py index 39fb689..d66c058 100755 --- a/backend/backend/mockremote/__init__.py +++ b/backend/backend/mockremote/__init__.py @@ -16,6 +16,7 @@ # copyright 2012 Red Hat, Inc.
+# Original approach was: # take list of pkgs # take single hostname # send 1 pkg at a time to host @@ -24,6 +25,8 @@ # repeat # take args from mockchain (more or less)
+# now we build only one package per MockRemote instance + from __future__ import print_function from __future__ import unicode_literals from __future__ import division @@ -307,7 +310,7 @@ class MockRemote(object): raise MockRemoteError("Error occurred during build{0}" .format(os.path.basename(self.pkg)))
- def build_pkgs(self): + def build_pkg(self): """Build pkg defined in self.job
diff --git a/backend/run/copr_mockremote.py b/backend/run/copr_mockremote.py index e4c4d1f..1d7a8c6 100644 --- a/backend/run/copr_mockremote.py +++ b/backend/run/copr_mockremote.py @@ -150,7 +150,7 @@ def main(args): if not opts.quiet: print("Building {0} pkgs".format(len(pkgs)))
- mr.build_pkgs() + mr.build_pkg()
if not opts.quiet: print("Output written to: {0}".format(opts.destdir)) diff --git a/backend/tests/mockremote/test_mockremote.py b/backend/tests/mockremote/test_mockremote.py index 4d3eb03..2a9ae4f 100644 --- a/backend/tests/mockremote/test_mockremote.py +++ b/backend/tests/mockremote/test_mockremote.py @@ -292,7 +292,7 @@ class TestMockRemote(object): self.mr.build_pkg_and_process_results.side_effect = [ MockRemoteError(err_msg), build_details]
- result = self.mr.build_pkgs() + result = self.mr.build_pkg() assert result == build_details assert err_msg in self._cb_log["error"][-1]
@@ -303,4 +303,4 @@ class TestMockRemote(object): self.mr.build_pkg_and_process_results.side_effect = MockRemoteError(err_msg)
with pytest.raises(MockRemoteError): - self.mr.build_pkgs() + self.mr.build_pkg() diff --git a/backend/tests/test_createrepo.py b/backend/tests/test_createrepo.py index c820aaf..3e4ff60 100644 --- a/backend/tests/test_createrepo.py +++ b/backend/tests/test_createrepo.py @@ -1,18 +1,10 @@ -__author__ = 'vgologuz' - import os - -from collections import defaultdict -import json -from pprint import pprint -from _pytest.capture import capsys -import pytest import copy import tempfile import shutil +import time
import six -import time
if six.PY3: from unittest import mock diff --git a/backend/tests/test_dispatcher.py b/backend/tests/test_dispatcher.py new file mode 100644 index 0000000..133378b --- /dev/null +++ b/backend/tests/test_dispatcher.py @@ -0,0 +1,57 @@ +import os + +from collections import defaultdict +import json +from pprint import pprint +from _pytest.capture import capsys +import pytest +import copy +import tempfile +import shutil + +import six +import time + +if six.PY3: + from unittest import mock + from unittest.mock import MagicMock +else: + import mock + from mock import MagicMock + + +from backend.dispatcher import Worker + + +class TestWorkerStatic(object): + + def setup_method(self, method): + self.test_time = time.time() + subdir = "test_createrepo_{}".format(time.time()) + self.tmp_dir_path = os.path.join(tempfile.gettempdir(), subdir) + os.mkdir(self.tmp_dir_path) + + self.pkg_pdn = "foobar" + self.pkg_name = "{}.src.rpm".format(self.pkg_pdn) + self.pkg_path = os.path.join(self.tmp_dir_path, self.pkg_name) + with open(self.pkg_path, "w") as handle: + handle.write("1") + + self.chroot = "fedora-20-x86_64" + + def teardown_method(self, method): + # print("\nremove: {}".format(self.tmp_dir_path)) + shutil.rmtree(self.tmp_dir_path) + + def test_pkg_built_before(self): + assert not Worker.pkg_built_before(self.pkg_path, self.chroot, self.tmp_dir_path) + target_dir = os.path.join(self.tmp_dir_path, self.chroot, self.pkg_pdn) + os.makedirs(target_dir) + assert not Worker.pkg_built_before(self.pkg_path, self.chroot, self.tmp_dir_path) + with open(os.path.join(target_dir, "fail"), "w") as handle: + handle.write("undone") + assert not Worker.pkg_built_before(self.pkg_path, self.chroot, self.tmp_dir_path) + os.remove(os.path.join(target_dir, "fail")) + with open(os.path.join(target_dir, "success"), "w") as handle: + handle.write("done") + assert Worker.pkg_built_before(self.pkg_path, self.chroot, self.tmp_dir_path)
copr-commits@lists.fedorahosted.org