From e9d20387c1b4f9efea263e1f24b442b4bd3ae5d1 Mon Sep 17 00:00:00 2001 From: Lubomír Sedlář Date: Jan 13 2021 09:23:50 +0000 Subject: [PATCH 1/2] Add python 3.9 to tox configuration --- diff --git a/tox.ini b/tox.ini index b965783..00f86a1 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist=py27,py35,py36,py37,py38,coverage +envlist=py27,py35,py36,py37,py38,py39,coverage skip_missing_interpreters = true minversion=3.12.0 From 6bed097706a77b960edc3d89497211df518d40df Mon Sep 17 00:00:00 2001 From: Lubomír Sedlář Date: Jan 13 2021 09:23:50 +0000 Subject: [PATCH 2/2] find_latest: Fix computation of previous version If the version ends with .0, decrement the part before that. JIRA: RHELCMP-3632 --- diff --git a/compose_utils/find_latest.py b/compose_utils/find_latest.py index d64215b..2a89713 100644 --- a/compose_utils/find_latest.py +++ b/compose_utils/find_latest.py @@ -106,11 +106,37 @@ def filter_compatible_composes(composes, compose): ) +def get_previous_version(version): + """Determine previous version from the given one. The major version is + never decremented though. + + >>> get_previous_version("1.2") + "1.1" + >>> get_previous_version("1.2.1") + "1.2.0" + >>> get_previous_version("1.2.0") + 1.1.0 + >>> get_previous_version("1.0") + ValueError + """ + version_split = version.split(".") + pos = len(version_split) - 1 + while pos > 1 and version_split[pos] == "0": + pos -= 1 + if pos <= 1 and version_split[pos] == "0": + # The only non-zero position was actually the major version. We don't + # want to decrement that. + raise ValueError("No previous version for this major version.") + version_split[pos] = str(int(version_split[pos]) - 1) + return ".".join(version_split) + + def filter_previous_release(composes, compose): """Return composes for the previous product release""" - version_split = compose.info.release.version.split(".") - version_split[-1] = str(int(version_split[-1]) - 1) - previous_version = ".".join(version_split) + try: + previous_version = get_previous_version(compose.info.release.version) + except ValueError: + return [] return filter_composes( composes, release_short=compose.info.release.short, diff --git a/tests/test_find_latest.py b/tests/test_find_latest.py index 033ceda..048a966 100644 --- a/tests/test_find_latest.py +++ b/tests/test_find_latest.py @@ -421,3 +421,18 @@ class TestGetRelatedComposes(unittest.TestCase): self.assertEqual(gpm.call_args_list, [mock.call(self.ci_list, self.ci)]) self.assertEqual(gsmpv.call_args_list, [mock.call(self.ci_list, self.ci)]) self.assertEqual(gsmpr.call_args_list, [mock.call(self.ci_list, self.ci)]) + + +class TestGetPreviousVersion(unittest.TestCase): + def test_two_digit(self): + self.assertEqual(find_latest.get_previous_version("7.9"), "7.8") + + def test_three_digit(self): + self.assertEqual(find_latest.get_previous_version("1.2.3"), "1.2.2") + + def test_end_with_zero_three_components(self): + self.assertEqual(find_latest.get_previous_version("1.2.0"), "1.1.0") + + def test_end_with_zero_two_components(self): + with self.assertRaises(ValueError): + print(find_latest.get_previous_version("1.0"))