From 1884d85e7e27aa938db660ff9be1d4960351ec90 Mon Sep 17 00:00:00 2001 From: linsui <2873532-linsui@users.noreply.gitlab.com> Date: Tue, 23 Dec 2025 01:57:39 +0800 Subject: [PATCH 1/2] Fix wrong type: build.versionCode is int --- fdroidserver/scanner.py | 2 +- tests/test_scanner.py | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/fdroidserver/scanner.py b/fdroidserver/scanner.py index 96b6a1e2..9aa16bb7 100644 --- a/fdroidserver/scanner.py +++ b/fdroidserver/scanner.py @@ -1290,7 +1290,7 @@ def main(): ) continue - logging.info("...scanning versionCode " + build.versionCode) + logging.info(f"...scanning versionCode {build.versionCode}") # Prepare the source code... common.prepare_source( vcs, app, build, build_dir, srclib_dir, extlib_dir, False diff --git a/tests/test_scanner.py b/tests/test_scanner.py index 00595bb1..96f477ac 100755 --- a/tests/test_scanner.py +++ b/tests/test_scanner.py @@ -81,6 +81,31 @@ class ScannerTest(SetUpTearDownMixin, unittest.TestCase): super().setUp() fdroidserver.scanner.ScannerTool.refresh_allowed = False + def test_looping_through_builds(self): + """Exercises some of main() to get some coverage.""" + appid = "com.example" + with ( + tempfile.TemporaryDirectory() as tmpdir, + TmpCwd(tmpdir), + mock.patch("sys.argv", ["fdroid scanner", appid]), + mock.patch( + "fdroidserver.common.prepare_source", lambda v, a, b, d, s, e, r: None + ), + ): + os.mkdir("metadata") + pathlib.Path(f"metadata/{appid}.yml").write_text( + textwrap.dedent( + """ + RepoType: git + Builds: + - versionCode: 1 + commit: v1.0 + """ + ) + ) + fdroidserver.scanner.main() + self.assertTrue(os.path.exists("build")) + def test_scan_source_files(self): fdroidserver.common.options = mock.Mock() fdroidserver.common.options.json = False From a43efb1469afa2c8cde5bf05cb62157e210481ee Mon Sep 17 00:00:00 2001 From: linsui <2873532-linsui@users.noreply.gitlab.com> Date: Tue, 23 Dec 2025 01:58:01 +0800 Subject: [PATCH 2/2] scanner: fix gradle command match When there is other flavors inserted before the command it should also match. Before this change only other flavors appended after the command is matched --- fdroidserver/scanner.py | 4 ++-- tests/source-files/catalog.test/buildSrc/build.gradle.kts | 1 + tests/test_scanner.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/fdroidserver/scanner.py b/fdroidserver/scanner.py index 9aa16bb7..b0783bfa 100644 --- a/fdroidserver/scanner.py +++ b/fdroidserver/scanner.py @@ -20,8 +20,8 @@ import itertools import json import logging import os -import stat import re +import stat import sys import traceback import urllib.parse @@ -284,7 +284,7 @@ def get_gradle_compile_commands_without_catalog(build): def get_gradle_compile_commands_with_catalog(build, prefix): return [ - re.compile(rf'\s*{c}.*\s*\(?{prefix}\.([a-z0-9.]+)', re.IGNORECASE) + re.compile(rf"""\s*\S*{c}\S*\s*\(?{prefix}\.([a-z0-9.]+)""", re.IGNORECASE) for c in get_gradle_compile_commands(build) ] diff --git a/tests/source-files/catalog.test/buildSrc/build.gradle.kts b/tests/source-files/catalog.test/buildSrc/build.gradle.kts index 40eeaa54..944d53d4 100644 --- a/tests/source-files/catalog.test/buildSrc/build.gradle.kts +++ b/tests/source-files/catalog.test/buildSrc/build.gradle.kts @@ -6,4 +6,5 @@ plugins { dependencies { implementation(libs.plugins.androidApplication.asLibraryDependency) + "playImplementation"(libs.firebase.core) } diff --git a/tests/test_scanner.py b/tests/test_scanner.py index 96f477ac..99eea021 100755 --- a/tests/test_scanner.py +++ b/tests/test_scanner.py @@ -124,7 +124,7 @@ class ScannerTest(SetUpTearDownMixin, unittest.TestCase): 'se.manyver': 3, 'lockfile.test': 1, 'com.lolo.io.onelist': 6, - 'catalog.test': 22, + 'catalog.test': 23, } for d in (basedir / 'source-files').iterdir(): build = fdroidserver.metadata.Build()