diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 253d2460..8fe48874 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -57,7 +57,7 @@ import defusedxml.ElementTree as XMLElementTree from base64 import urlsafe_b64encode from binascii import hexlify from datetime import datetime, timedelta, timezone -from distutils.version import LooseVersion +from packaging.version import Version from queue import Queue from zipfile import ZipFile @@ -656,7 +656,7 @@ def find_apksigner(config): if not os.path.isdir(os.path.join(build_tools_path, f)): continue try: - if LooseVersion(f) < LooseVersion(MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION): + if Version(f) < Version(MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION): logging.debug("Local Android SDK only has outdated apksigner versions") return except TypeError: @@ -717,9 +717,9 @@ def test_aapt_version(aapt): # the Debian package has the version string like "v0.2-23.0.2" too_old = False if '.' in bugfix: - if LooseVersion(bugfix) < LooseVersion(MINIMUM_AAPT_BUILD_TOOLS_VERSION): + if Version(bugfix) < Version(MINIMUM_AAPT_BUILD_TOOLS_VERSION): too_old = True - elif LooseVersion('.'.join((major, minor, bugfix))) < LooseVersion('0.2.4062713'): + elif Version('.'.join((major, minor, bugfix))) < Version('0.2.4062713'): too_old = True if too_old: logging.warning(_("'{aapt}' is too old, fdroid requires build-tools-{version} or newer!") diff --git a/setup.py b/setup.py index f89ddf94..19eac953 100755 --- a/setup.py +++ b/setup.py @@ -98,6 +98,7 @@ setup( 'paramiko', 'Pillow', 'apache-libcloud >= 0.14.1', + 'packaging', 'pyasn1 >=0.4.1, < 0.5.0', 'pyasn1-modules >= 0.2.1, < 0.3', 'python-vagrant', diff --git a/tests/common.TestCase b/tests/common.TestCase index 0fc8c41f..dc9717db 100755 --- a/tests/common.TestCase +++ b/tests/common.TestCase @@ -21,7 +21,7 @@ import unittest import textwrap import yaml import gzip -from distutils.version import LooseVersion +from packaging.version import Version from zipfile import BadZipFile, ZipFile from unittest import mock from pathlib import Path @@ -852,9 +852,9 @@ class CommonTest(unittest.TestCase): v = bt.split('/')[-2] if v == 'debian': continue - if LooseVersion(version) < LooseVersion(v): + if Version(version) < Version(v): version = v - if LooseVersion(version) < LooseVersion(min_version): + if Version(version) < Version(min_version): self.skipTest('SKIPPING since build-tools %s or higher is required!' % min_version) fdroidserver.common.config = {'sdk_path': android_home} with mock.patch.dict(os.environ, clear=True): @@ -2374,10 +2374,10 @@ class CommonTest(unittest.TestCase): import sdkmanager import pkg_resources - sdkmanager_version = LooseVersion( + sdkmanager_version = Version( pkg_resources.get_distribution('sdkmanager').version ) - if sdkmanager_version < LooseVersion('0.6.4'): + if sdkmanager_version < Version('0.6.4'): raise unittest.SkipTest('needs fdroid sdkmanager >= 0.6.4') fdroidserver.common.config = {'sdk_path': 'placeholder'} diff --git a/tests/gradle-release-checksums.py b/tests/gradle-release-checksums.py index 1ec54c5f..0c190ebf 100755 --- a/tests/gradle-release-checksums.py +++ b/tests/gradle-release-checksums.py @@ -8,7 +8,7 @@ import requests import subprocess import sys from colorama import Fore, Style -from distutils.version import LooseVersion +from packaging.version import Version checksums = None @@ -52,7 +52,7 @@ for url, checksum in config['CACHE_FILES']: # error if makebuildserver is missing the latest version for version in sorted(versions.keys()): if version not in makebuildserver_versions \ - and LooseVersion(version) > LooseVersion(sorted(makebuildserver_versions)[-1]): + and Version(version) > Version(sorted(makebuildserver_versions)[-1]): add_before = """ ('https://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin',""" new = to_compile.replace( add_before, @@ -78,14 +78,14 @@ for m in get_sha_pat.finditer(gradlew_fdroid): + Style.RESET_ALL) errors += 1 new = '' -for version in sorted(versions.keys(), key=LooseVersion): +for version in sorted(versions.keys(), key=Version): sha256 = versions[version] spaces = '' for i in range(6 - len(version)): spaces += ' ' new += """ '%s')%s echo '%s' ;;\n""" % (version, spaces, sha256) gradlew_fdroid = gradlew_fdroid.replace(current, new) -plugin_v = ' '.join(sorted(versions.keys(), key=LooseVersion, reverse=True)) +plugin_v = ' '.join(sorted(versions.keys(), key=Version, reverse=True)) plugin_v_pat = re.compile(r'\nplugin_v=\(([0-9. ]+)\)') with open('gradlew-fdroid', 'w') as fp: fp.write(plugin_v_pat.sub('\nplugin_v=(%s)' % plugin_v, gradlew_fdroid)) diff --git a/tests/update.TestCase b/tests/update.TestCase index 7b9d6720..97829ff8 100755 --- a/tests/update.TestCase +++ b/tests/update.TestCase @@ -21,7 +21,7 @@ import yaml import zipfile import textwrap from datetime import datetime -from distutils.version import LooseVersion +from packaging.version import Version from pathlib import Path from testcommon import TmpCwd, mkdtemp from unittest import mock @@ -1041,7 +1041,7 @@ class UpdateTest(unittest.TestCase): javac = config['jarsigner'].replace('jarsigner', 'javac') v = subprocess.check_output([javac, '-version'], stderr=subprocess.STDOUT)[6:-1].decode('utf-8') - if LooseVersion(v) < LooseVersion('1.8.0_132'): + if Version(v) < Version('1.8.0_132'): print('SKIPPING: running tests with old Java (' + v + ')') return