From 6a3758d3c4ac722458241d65bd1258d6c9008a3b Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 25 Jul 2025 16:04:25 +0200 Subject: [PATCH] update: more accurate fastlane subdir/flavor matching This should fix Schildichat showing Element X's metadata. --- fdroidserver/update.py | 15 +++++++++++---- tests/test_update.py | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/fdroidserver/update.py b/fdroidserver/update.py index 6369a8b8..71d32952 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -1148,6 +1148,7 @@ def insert_localized_app_metadata(apps): metadata// fastlane/metadata/android// + /fastlane/metadata/android// src//fastlane/metadata/android// ...as well as the /metadata// directory. @@ -1186,7 +1187,7 @@ def insert_localized_app_metadata(apps): builds = apps.get(packageName, {}).get('Builds', []) found_in_subdir = ( builds - and len(segments) > 7 + and len(segments) > 6 and segments[-4] == "fastlane" and segments[-3] == "metadata" and segments[-2] == "android" @@ -1199,12 +1200,18 @@ def insert_localized_app_metadata(apps): build_flavors = common.calculate_gradle_flavor_combination( builds[-1]['gradle'] ) + found_in_flavor = ( + len(segments) > 7 + and segments[2] == 'src' + and segments[4] == "fastlane" + and segments[3] in build_flavors + ) if ( not found_in_subdir - and len(segments) >= 5 - and segments[4] == "fastlane" - and segments[3] not in build_flavors + and not found_in_flavor + and segments[0] == 'build' + and segments[2] not in ('metadata', 'fastlane') ): logging.debug( 'Not scanning "{dir}" with unknown subdir or gradle flavor "{value}"'.format( diff --git a/tests/test_update.py b/tests/test_update.py index f17667e2..468cd813 100755 --- a/tests/test_update.py +++ b/tests/test_update.py @@ -286,6 +286,44 @@ class UpdateTest(unittest.TestCase): fdroidserver.update.insert_localized_app_metadata(apps) self.assertEqual(second_value, apps[app.id]['localized']['en-US']['name']) + def test_fastlane_with_schildichat(self): + """Test if fastlane is found in this tangle of dirs and symlinks. + + https://github.com/SchildiChat/schildichat-android-next/tree/sc_v0.10.3-ex_25_6_2 + """ + os.chdir(self.testdir) + config = dict() + fdroidserver.common.fill_config_defaults(config) + fdroidserver.update.config = config + + app = fdroidserver.metadata.App() + app.id = 'chat.schildi.android' + build_dir = f'build/{app.id}' + flavors = ['fdroid', 'sc', 'default'] + subdir = 'app' + apps = {app.id: app} + build = fdroidserver.metadata.Build() + build.versionCode = 42 + build.gradle = flavors + build.subdir = subdir + app['Builds'] = [build] + + wrong_value = 'wrong' + wrong_dir = Path(f'{build_dir}/upstream_infra/fastlane/metadata/android/en-US') + wrong_dir.mkdir(parents=True) + (wrong_dir / 'title.txt').write_text(wrong_value) + + right_value = 'right' + right_dir = Path(f'{build_dir}/metadata/en-US') + right_dir.mkdir(parents=True) + (right_dir / 'title.txt').write_text(right_value) + _fastlane = Path('.fastlane/metadata') + _fastlane.mkdir(parents=True) + os.symlink('../../metadata', _fastlane / 'android') + os.symlink('.fastlane', 'fastlane') + fdroidserver.update.insert_localized_app_metadata(apps) + self.assertEqual(right_value, apps[app.id]['localized']['en-US']['name']) + def test_fastlane_with_multi_level_subdir(self): """Test if fastlane in multi-level subdir is found.""" os.chdir(self.testdir)