From 898624dcac724628bc00e817971aa36a5576ebdc Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 16 Nov 2022 10:17:51 +0100 Subject: [PATCH] common.get_android_tools_versions() for modern NDK dir layout NDK r10e is still in use, but is so old, it does not have the modern sdkmanager package metadata. --- MANIFEST.in | 9 ++-- fdroidserver/common.py | 10 ++-- tests/common.TestCase | 46 +++++++++++++++---- .../android-ndk-r10e/RELEASE.TXT | 1 + .../android-sdk/ndk-bundle/package.xml | 1 + .../android-sdk/ndk-bundle/source.properties | 2 + .../ndk/11.2.2725575}/source.properties | 0 .../ndk/17.2.4988734}/source.properties | 0 .../ndk/21.3.6528147}/source.properties | 0 9 files changed, 52 insertions(+), 17 deletions(-) create mode 100644 tests/get_android_tools_versions/android-ndk-r10e/RELEASE.TXT create mode 100644 tests/get_android_tools_versions/android-sdk/ndk-bundle/package.xml create mode 100644 tests/get_android_tools_versions/android-sdk/ndk-bundle/source.properties rename tests/get_android_tools_versions/{android-ndk/r11c => android-sdk/ndk/11.2.2725575}/source.properties (100%) rename tests/get_android_tools_versions/{android-ndk/r17c => android-sdk/ndk/17.2.4988734}/source.properties (100%) rename tests/get_android_tools_versions/{android-ndk/android-ndk-r21d => android-sdk/ndk/21.3.6528147}/source.properties (100%) diff --git a/MANIFEST.in b/MANIFEST.in index 32018317..6fb0a57e 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -552,9 +552,12 @@ include tests/dump_internal_metadata_format.py include tests/exception.TestCase include tests/extra/manual-vmtools-test.py include tests/funding-usernames.yaml -include tests/get_android_tools_versions/android-ndk/android-ndk-r21d/source.properties -include tests/get_android_tools_versions/android-ndk/r11c/source.properties -include tests/get_android_tools_versions/android-ndk/r17c/source.properties +include tests/get_android_tools_versions/android-ndk-r10e/RELEASE.TXT +include tests/get_android_tools_versions/android-sdk/ndk/11.2.2725575/source.properties +include tests/get_android_tools_versions/android-sdk/ndk/17.2.4988734/source.properties +include tests/get_android_tools_versions/android-sdk/ndk/21.3.6528147/source.properties +include tests/get_android_tools_versions/android-sdk/ndk-bundle/package.xml +include tests/get_android_tools_versions/android-sdk/ndk-bundle/source.properties include tests/get_android_tools_versions/android-sdk/patcher/v4/source.properties include tests/get_android_tools_versions/android-sdk/platforms/android-30/source.properties include tests/get_android_tools_versions/android-sdk/skiaparser/1/source.properties diff --git a/fdroidserver/common.py b/fdroidserver/common.py index e980f7fd..59570b52 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -4043,10 +4043,10 @@ def get_android_tools_versions(): sdk_path = config['sdk_path'] if sdk_path[-1] != '/': sdk_path += '/' - components = [] - for ndk_path in config.get('ndk_paths', []): + components = set() + for ndk_path in config.get('ndk_paths', {}).values(): version = get_ndk_version(ndk_path) - components.append((os.path.basename(ndk_path), str(version))) + components.add((os.path.relpath(ndk_path, sdk_path), str(version))) pattern = re.compile(r'^Pkg.Revision *= *(.+)', re.MULTILINE) for root, dirs, files in os.walk(sdk_path): @@ -4055,9 +4055,9 @@ def get_android_tools_versions(): with open(source_properties, 'r') as fp: m = pattern.search(fp.read()) if m: - components.append((root[len(sdk_path):], m.group(1))) + components.add((os.path.relpath(root, sdk_path), m.group(1))) - return components + return sorted(components) def get_android_tools_version_log(): diff --git a/tests/common.TestCase b/tests/common.TestCase index 0d17a879..01f8a0e7 100755 --- a/tests/common.TestCase +++ b/tests/common.TestCase @@ -2118,21 +2118,49 @@ class CommonTest(unittest.TestCase): {'AutoName': testvalue, 'id': 'nope'}]: self.assertEqual(testvalue, fdroidserver.common.get_app_display_name(app)) + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_get_android_tools_versions(self): - sdk_path = os.path.join(self.basedir, 'get_android_tools_versions') - fdroidserver.common.config = {'sdk_path': sdk_path} + sdk_path = os.path.join(self.basedir, 'get_android_tools_versions/android-sdk') + config = { + 'ndk_paths': {'r10e': os.path.join(sdk_path, '..', 'android-ndk-r10e')}, + 'sdk_path': sdk_path, + } + fdroidserver.common.config = config + fdroidserver.common.fill_config_defaults(config) components = fdroidserver.common.get_android_tools_versions() expected = ( - ('android-ndk/android-ndk-r21d', '21.3.6528147'), - ('android-ndk/r11c', '11.2.2725575'), - ('android-ndk/r17c', '17.2.4988734'), - ('android-sdk/patcher/v4', '1'), - ('android-sdk/platforms/android-30', '3'), - ('android-sdk/skiaparser/1', '6'), - ('android-sdk/tools', '26.1.1'), + ('../android-ndk-r10e', 'r10e'), + ('ndk-bundle', '21.4.7075529'), + ('ndk/11.2.2725575', '11.2.2725575'), + ('ndk/17.2.4988734', '17.2.4988734'), + ('ndk/21.3.6528147', '21.3.6528147'), + ('patcher/v4', '1'), + ('platforms/android-30', '3'), + ('skiaparser/1', '6'), + ('tools', '26.1.1'), ) self.assertSequenceEqual(expected, sorted(components)) + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) + def test_get_android_tools_versions_no_ndk(self): + with tempfile.TemporaryDirectory() as tmpdir: + sdk_path = Path(tmpdir) / 'get_android_tools_versions' + shutil.copytree( + os.path.join(self.basedir, 'get_android_tools_versions'), sdk_path + ) + shutil.rmtree(sdk_path / 'android-ndk-r10e') + shutil.rmtree(sdk_path / 'android-sdk/ndk') + shutil.rmtree(sdk_path / 'android-sdk/ndk-bundle') + fdroidserver.common.config = {'sdk_path': str(sdk_path)} + components = fdroidserver.common.get_android_tools_versions() + expected = ( + ('android-sdk/patcher/v4', '1'), + ('android-sdk/platforms/android-30', '3'), + ('android-sdk/skiaparser/1', '6'), + ('android-sdk/tools', '26.1.1'), + ) + self.assertSequenceEqual(expected, sorted(components)) + def test_read_pkg_args(self): allow_vercodes = False self.assertEqual( diff --git a/tests/get_android_tools_versions/android-ndk-r10e/RELEASE.TXT b/tests/get_android_tools_versions/android-ndk-r10e/RELEASE.TXT new file mode 100644 index 00000000..39be8014 --- /dev/null +++ b/tests/get_android_tools_versions/android-ndk-r10e/RELEASE.TXT @@ -0,0 +1 @@ +r10e-rc4 (64-bit) diff --git a/tests/get_android_tools_versions/android-sdk/ndk-bundle/package.xml b/tests/get_android_tools_versions/android-sdk/ndk-bundle/package.xml new file mode 100644 index 00000000..41b8cac6 --- /dev/null +++ b/tests/get_android_tools_versions/android-sdk/ndk-bundle/package.xml @@ -0,0 +1 @@ +2147075529Android NDK \ No newline at end of file diff --git a/tests/get_android_tools_versions/android-sdk/ndk-bundle/source.properties b/tests/get_android_tools_versions/android-sdk/ndk-bundle/source.properties new file mode 100644 index 00000000..14e4789f --- /dev/null +++ b/tests/get_android_tools_versions/android-sdk/ndk-bundle/source.properties @@ -0,0 +1,2 @@ +Pkg.Desc = Android NDK +Pkg.Revision = 21.4.7075529 diff --git a/tests/get_android_tools_versions/android-ndk/r11c/source.properties b/tests/get_android_tools_versions/android-sdk/ndk/11.2.2725575/source.properties similarity index 100% rename from tests/get_android_tools_versions/android-ndk/r11c/source.properties rename to tests/get_android_tools_versions/android-sdk/ndk/11.2.2725575/source.properties diff --git a/tests/get_android_tools_versions/android-ndk/r17c/source.properties b/tests/get_android_tools_versions/android-sdk/ndk/17.2.4988734/source.properties similarity index 100% rename from tests/get_android_tools_versions/android-ndk/r17c/source.properties rename to tests/get_android_tools_versions/android-sdk/ndk/17.2.4988734/source.properties diff --git a/tests/get_android_tools_versions/android-ndk/android-ndk-r21d/source.properties b/tests/get_android_tools_versions/android-sdk/ndk/21.3.6528147/source.properties similarity index 100% rename from tests/get_android_tools_versions/android-ndk/android-ndk-r21d/source.properties rename to tests/get_android_tools_versions/android-sdk/ndk/21.3.6528147/source.properties