Reject yum gather backend on Python 3

It will not run, and having a nice error message is better than a
cryptic crash.

Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
This commit is contained in:
Lubomír Sedlář 2017-09-21 09:41:43 +02:00
parent f3806f7c77
commit daf162503c
3 changed files with 51 additions and 6 deletions

View File

@ -575,10 +575,12 @@ Options
* With ``greedy_method = "build" ``pkg-b-provider-1`` and * With ``greedy_method = "build" ``pkg-b-provider-1`` and
``pkg-b-provider-2`` will be pulled in. ``pkg-b-provider-2`` will be pulled in.
**gather_backend** = ``yum`` **gather_backend**
(*str*) -- Either ``yum`` or ``dnf``. This changes the entire codebase (*str*) --This changes the entire codebase doing dependency solving, so it
doing dependency solving, so it can change the result in unpredictable can change the result in unpredictable ways.
ways.
On Python 2, the choice is between ``yum`` or ``dnf`` and defaults to
``yum``. On Python 3 ``dnf`` is the only option and default.
Particularly the multilib work is performed differently by using Particularly the multilib work is performed differently by using
``python-multilib`` library. Please refer to ``multilib`` option to see the ``python-multilib`` library. Please refer to ``multilib`` option to see the

View File

@ -581,8 +581,8 @@ def make_schema():
"gather_source_mapping": {"type": "string"}, "gather_source_mapping": {"type": "string"},
"gather_backend": { "gather_backend": {
"type": "string", "type": "string",
"enum": ["yum", "dnf"], "enum": _get_gather_backends(),
"default": "yum", "default": _get_default_gather_backend(),
}, },
"gather_profiler": { "gather_profiler": {
"type": "boolean", "type": "boolean",
@ -1203,3 +1203,13 @@ CONFIG_DEPS = {
], ],
}, },
} }
def _get_gather_backends():
if six.PY2:
return ['yum', 'dnf']
return ['dnf']
def _get_default_gather_backend():
return 'yum' if six.PY2 else 'dnf'

View File

@ -10,6 +10,7 @@ except ImportError:
import os import os
import six import six
import sys import sys
import mock
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
@ -250,6 +251,38 @@ class GatherConfigTestCase(ConfigTestCase):
cfg, cfg,
[checks.REQUIRES.format('gather_source', 'json', 'gather_source_mapping')]) [checks.REQUIRES.format('gather_source', 'json', 'gather_source_mapping')])
def test_dnf_backend_is_default_on_py3(self):
cfg = load_config(
pkgset_source='koji',
pkgset_koji_tag='f27',
)
with mock.patch('six.PY2', new=False):
self.assertValidation(cfg, [])
self.assertEqual(cfg['gather_backend'], 'dnf')
def test_yum_backend_is_default_on_py2(self):
cfg = load_config(
pkgset_source='koji',
pkgset_koji_tag='f27',
)
with mock.patch('six.PY2', new=True):
self.assertValidation(cfg, [])
self.assertEqual(cfg['gather_backend'], 'yum')
def test_yum_backend_is_rejected_on_py3(self):
cfg = load_config(
pkgset_source='koji',
pkgset_koji_tag='f27',
gather_backend='yum',
)
with mock.patch('six.PY2', new=False):
self.assertValidation(
cfg,
["Failed validation in gather_backend: 'yum' is not one of ['dnf']"])
class OSBSConfigTestCase(ConfigTestCase): class OSBSConfigTestCase(ConfigTestCase):
def test_validate(self): def test_validate(self):