From fb2c062226ca75f591397b2a68c14e58d48c2995 Mon Sep 17 00:00:00 2001 From: Vinicius Moreira Date: Wed, 2 Sep 2020 11:10:50 -0300 Subject: [PATCH] [arch] fix -> AUR: not checking updates correctly when there are epoch numbers present --- bauh/gems/arch/mapper.py | 16 +++++++++++++++- tests/gems/arch/test_arch_data_mapper.py | 15 +++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/bauh/gems/arch/mapper.py b/bauh/gems/arch/mapper.py index bc081ec0..00974511 100644 --- a/bauh/gems/arch/mapper.py +++ b/bauh/gems/arch/mapper.py @@ -49,7 +49,21 @@ class ArchDataMapper: def check_update(version: str, latest_version: str) -> bool: if version and latest_version: try: - return parse_version(version) < parse_version(latest_version) + ver_epoch, latest_epoch = version.split(':'), latest_version.split(':') + + if len(ver_epoch) > 1 and len(latest_epoch) > 1: + parsed_ver_epoch, parsed_latest_epoch = parse_version(ver_epoch[0]), parse_version(latest_epoch[0]) + + if parsed_ver_epoch == parsed_latest_epoch: + return parse_version(''.join(ver_epoch[1:])) < parse_version(''.join(latest_epoch[1:])) + else: + return parsed_ver_epoch < parsed_latest_epoch + elif len(ver_epoch) > 1 and len(latest_epoch) == 1: + return False + elif len(ver_epoch) == 1 and len(latest_epoch) > 1: + return True + else: + return parse_version(version) < parse_version(latest_version) except: print('{}Version: {}. Latest version: {}{}'.format(Fore.RED, version, latest_version, Fore.RESET)) traceback.print_exc() diff --git a/tests/gems/arch/test_arch_data_mapper.py b/tests/gems/arch/test_arch_data_mapper.py index ad300458..0f704d88 100644 --- a/tests/gems/arch/test_arch_data_mapper.py +++ b/tests/gems/arch/test_arch_data_mapper.py @@ -28,3 +28,18 @@ class ArchDataMapperTest(TestCase): self.assertTrue(ArchDataMapper.check_update('0.9.7.RC-9', '0.9.7.RC-10')) self.assertFalse(ArchDataMapper.check_update('1.1.0.r11.caacf30-1', 'r65.4c7144a-1')) self.assertFalse(ArchDataMapper.check_update('1.2.16.r688.8b2c199-1', 'r2105.e91f0e9-3')) + + def test_check_update__versions_with_epics(self): + self.assertTrue(ArchDataMapper.check_update('1.2-1', '1:1.1-1')) + self.assertFalse(ArchDataMapper.check_update('1:1.1-1', '1.2-1')) + + self.assertTrue(ArchDataMapper.check_update('1:1.2-1', '2:0.1-1')) + self.assertFalse(ArchDataMapper.check_update('2:0.1-1', '1:1.2-1')) + + self.assertTrue(ArchDataMapper.check_update('10:1.1-1', '10:1.2-1')) + self.assertFalse(ArchDataMapper.check_update('10:1.2-1', '10:1.2-1')) + + self.assertTrue(ArchDataMapper.check_update('9:1.2-1', '10:0.1-1')) + + self.assertTrue(ArchDataMapper.check_update('9:1.1.1.1-2', '10:0.0')) + self.assertFalse(ArchDataMapper.check_update('10:0.0', '9:1.1.1.1-2'))