From 2f71c1167e00405d39a2e31ea8a45b48b4406f29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Fri, 17 Aug 2018 12:40:52 +0200 Subject: [PATCH 1/5] Travis CI: Run on multiple Fedora versions Now when we have 3.6 and 3.7, this is important --- .travis.yml | 8 ++++++++ Dockerfile | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index aca37ec..dbdaae9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,15 @@ sudo: required services: - docker +env: + - FEDORA=27 + - FEDORA=28 + - FEDORA=29 + - FEDORA=rawhide + install: + - sed -i "s/fedora-28-x86_64/fedora-${FEDORA}-x86_64/" mock.cfg + - sed -i "s|FROM fedora|FROM registry.fedoraproject.org/fedora:${FEDORA}|" Dockerfile - docker build -t taskotron . script: diff --git a/Dockerfile b/Dockerfile index 22ee8aa..7b0ea39 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM fedora RUN dnf -y install --setopt=install_weak_deps=false --setopt=tsflags=nodocs \ --setopt=deltarpm=false python2-rpm python3-rpm tox python2-dnf \ - python3-dnf mock && dnf clean all + python3-dnf mock --allowerasing --best && dnf clean all ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 From c9588f2ed3d758069a4f3d764b1b7fe8475961d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Mon, 27 Aug 2018 17:55:30 +0200 Subject: [PATCH 2/5] Test DNFQuery --- test/functional/test_requires.py | 9 +++++++++ test/integration/test_integration.py | 1 + 2 files changed, 10 insertions(+) diff --git a/test/functional/test_requires.py b/test/functional/test_requires.py index ba11b36..14e1e4e 100644 --- a/test/functional/test_requires.py +++ b/test/functional/test_requires.py @@ -3,6 +3,7 @@ import pytest from taskotron_python_versions.requires import ( + DNFQuery, get_versioned_name, check_requires_naming_scheme, ) @@ -86,3 +87,11 @@ def test_package_requires_are_misnamed(pkgglob, repoquery, expected): # Make sure all items from repoquery.data were popped out. assert not repoquery.data, ( 'Repoquery was not called for: {}'.format(repoquery.data)) + + +@pytest.mark.slow +def test_repoquery(): + repoquery = DNFQuery('25') + packages = repoquery.get_packages_by(provides='python-setuptools') + first = packages[0] + assert first.name == 'python2-setuptools' diff --git a/test/integration/test_integration.py b/test/integration/test_integration.py index 425eb74..1df2094 100644 --- a/test/integration/test_integration.py +++ b/test/integration/test_integration.py @@ -34,6 +34,7 @@ def rootdir(self): def _run(self, what, **kwargs): command = list(self.mock) # needs a copy not to change in place + command.append('--enable-network') command.append('--config-opts=root={}'.format(self.root)) command.append('--rootdir={}'.format(self.rootdir)) command.extend(what) From fe104cfd9363c2323c7e294cac5ead239e66dc8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Mon, 27 Aug 2018 18:00:56 +0200 Subject: [PATCH 3/5] Adapt to the new dnf API Requestd by us actually, see https://github.com/rpm-software-management/dnf/pull/842 --- taskotron_python_versions/requires.py | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/taskotron_python_versions/requires.py b/taskotron_python_versions/requires.py index 6966b32..4b19be8 100644 --- a/taskotron_python_versions/requires.py +++ b/taskotron_python_versions/requires.py @@ -38,25 +38,18 @@ def get_packages_by(self, **kwargs): """ try: return self.query.filter(**kwargs).run() - except AttributeError: + except AttributeError as ae: + log.debug(repr(ae)) return [] @staticmethod def add_repo(base, reponame, repourl): - try: - # Fedora 26 - repo = dnf.repo.Repo(reponame, parent_conf=base.conf) - except TypeError: - # Fedora 25 - repo = dnf.repo.Repo(reponame, cachedir=base.conf.cachedir) - metalink = ('https://mirrors.fedoraproject.org/' 'metalink?repo={}&arch=$basearch'.format(repourl)) - repo.metalink = dnf.conf.parser.substitute(metalink, - base.conf.substitutions) - - base.repos.add(repo) - repo.skip_if_unavailable = False + repo = base.repos.add_new_repo(reponame, + base.conf, + metalink=metalink, + skip_if_unavailable=False) repo.enable() repo.load() return repo From 145a3c2e4750aeeec6487188fad533d29c470777 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Mon, 27 Aug 2018 18:46:12 +0200 Subject: [PATCH 4/5] Travis CI: Use generic language to avoid being listed as Ruby --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index dbdaae9..3bd8959 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,4 @@ +language: generic sudo: required services: From 16ca63862428ec1012e8ec3f79db977291bd14a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Tue, 28 Aug 2018 00:40:23 +0200 Subject: [PATCH 5/5] Don't ignore all AttributeErrors, only None based --- taskotron_python_versions/requires.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/taskotron_python_versions/requires.py b/taskotron_python_versions/requires.py index 4b19be8..c698402 100644 --- a/taskotron_python_versions/requires.py +++ b/taskotron_python_versions/requires.py @@ -36,10 +36,10 @@ def get_packages_by(self, **kwargs): """Return the result of the DNF query execution, filtered by kwargs. """ - try: + if self.query is not None: return self.query.filter(**kwargs).run() - except AttributeError as ae: - log.debug(repr(ae)) + else: + log.debug('No query, we continue, but it is bad...') return [] @staticmethod @@ -69,6 +69,7 @@ def get_dnf_query(self): except dnf.exceptions.RepoError as err: if self.release == 'rawhide': log.error('{} (rawhide)'.format(err)) + # TODO Do not silently ignore the error return log.warning('Failed to load repos for {}, ' 'assuming rawhide'.format(self.release))