diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index ea21bb66..0fde3536 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -168,15 +168,8 @@ def check_tags(app, pattern): if vercode: logging.debug("Manifest exists in subdir '{0}'. Found version {1} ({2})" .format(subdir, version, vercode)) - try: - i_vercode = int(vercode, 0) - except ValueError: - i_vercode = int(vercode) - try: - i_hcode = int(hcode, 0) - except ValueError: - i_hcode = int(hcode) - if i_vercode > i_hcode: + i_vercode = common.version_code_string_to_int(vercode) + if i_vercode > common.version_code_string_to_int(hcode): hpak = package htag = tag hcode = str(i_vercode) diff --git a/fdroidserver/common.py b/fdroidserver/common.py index b5c4d2a5..9032cf8f 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -3224,6 +3224,14 @@ def string_is_integer(string): return False +def version_code_string_to_int(vercode): + """Convert an version code string of any base into an int""" + try: + return int(vercode, 0) + except ValueError: + return int(vercode) + + def local_rsync(options, fromdir, todir): '''Rsync method for local to local copying of things diff --git a/tests/common.TestCase b/tests/common.TestCase index 89508b15..33db7283 100755 --- a/tests/common.TestCase +++ b/tests/common.TestCase @@ -1084,6 +1084,14 @@ class CommonTest(unittest.TestCase): self.assertFalse(fdroidserver.common.string_is_integer('01g')) self.assertFalse(fdroidserver.common.string_is_integer('o123')) + def test_version_code_string_to_int(self): + self.assertEqual(16, fdroidserver.common.version_code_string_to_int('0x10')) + self.assertEqual(198712389, fdroidserver.common.version_code_string_to_int('198712389')) + self.assertEqual(8, fdroidserver.common.version_code_string_to_int('0o10')) + self.assertEqual(10, fdroidserver.common.version_code_string_to_int('010')) + self.assertEqual(123, fdroidserver.common.version_code_string_to_int('0000123')) + self.assertEqual(-42, fdroidserver.common.version_code_string_to_int('-42')) + if __name__ == "__main__": os.chdir(os.path.dirname(__file__))