diff --git a/.travis.yml b/.travis.yml index aca37ec..3bd8959 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,18 @@ +language: generic 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 diff --git a/taskotron_python_versions/requires.py b/taskotron_python_versions/requires.py index 6966b32..c698402 100644 --- a/taskotron_python_versions/requires.py +++ b/taskotron_python_versions/requires.py @@ -36,27 +36,20 @@ 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: + else: + log.debug('No query, we continue, but it is bad...') 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 @@ -76,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)) 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)