From b953694b1252306ba31a3f9da1dbf682d9f64eda Mon Sep 17 00:00:00 2001 From: Tomas Zigo Date: Tue, 31 Dec 2024 21:15:01 +0100 Subject: [PATCH 1/4] g.extension: fix getting addon dicrectories names without Py/C src code --- scripts/g.extension/g.extension.py | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/scripts/g.extension/g.extension.py b/scripts/g.extension/g.extension.py index f14a742ca06..0a0af7f6a31 100644 --- a/scripts/g.extension/g.extension.py +++ b/scripts/g.extension/g.extension.py @@ -1449,25 +1449,36 @@ def install_extension_xml(edict): def get_multi_addon_addons_which_install_only_html_man_page(): """Get multi-addon addons which install only manual html page - :return list addons: list of multi-addon addons which install - only manual html page + :return list addon_dirs: list of addon directories which does + not contains any Python, C source code + files """ - all_addon_dirs = [] + addon_dirs = [] + escape_dot = "\\." addon_paths = re.findall( - rf".*{options['extension']}*.", + rf".*{options['extension'].replace('.', escape_dot)}.*", get_addons_paths(gg_addons_base_dir=options["prefix"]), ) addon_dir_paths = {os.path.dirname(i) for i in addon_paths} for addon_dir in addon_dir_paths: addon_src_files = list( - re.finditer(rf"{addon_dir}/(.*py)|(.*c)\n", "\n".join(addon_paths)), + re.finditer( + rf"{addon_dir.replace('.', escape_dot)}/(.*.py)|(.*.c)\n", + "\n".join(addon_paths), + ), ) - if not addon_src_files: - all_addon_dirs.append(os.path.basename(addon_dir)) + if addon_dir not in {os.path.dirname(i.group(0)) for i in addon_src_files}: + addon_dirs.append(os.path.basename(addon_dir)) else: for addon_src_file in addon_src_files: - addon_paths.pop(addon_paths.index(addon_src_file.group(0))) - return all_addon_dirs + addon_paths.pop( + addon_paths.index(addon_src_file.group(0).replace("\n", "")) + ) + gs.debug( + f"Addon dicrectories names <{', '.join(addon_dirs)}> which " + " does not contains any Python, C source code files." + ) + return addon_dirs def filter_multi_addon_addons(mlist): @@ -1491,6 +1502,7 @@ def filter_multi_addon_addons(mlist): # to check if metadata is available if there is no executable module. for addon in get_multi_addon_addons_which_install_only_html_man_page(): if addon in mlist: + gs.debug(f"Addon name <{addon}> which install only HTML man page.") mlist.pop(mlist.index(addon)) return mlist From 922bc5e671137976dcc174f7dab9a2de576ddb4a Mon Sep 17 00:00:00 2001 From: Tomas Zigo Date: Thu, 2 Jan 2025 06:00:45 +0100 Subject: [PATCH 2/4] Fix debug messages text and func doc header --- scripts/g.extension/g.extension.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/g.extension/g.extension.py b/scripts/g.extension/g.extension.py index 0a0af7f6a31..7577902f712 100644 --- a/scripts/g.extension/g.extension.py +++ b/scripts/g.extension/g.extension.py @@ -1450,7 +1450,7 @@ def get_multi_addon_addons_which_install_only_html_man_page(): """Get multi-addon addons which install only manual html page :return list addon_dirs: list of addon directories which does - not contains any Python, C source code + not contain any Python or C source code files """ addon_dirs = [] @@ -1475,8 +1475,8 @@ def get_multi_addon_addons_which_install_only_html_man_page(): addon_paths.index(addon_src_file.group(0).replace("\n", "")) ) gs.debug( - f"Addon dicrectories names <{', '.join(addon_dirs)}> which " - " does not contains any Python, C source code files." + f"Addon dicrectory names <{', '.join(addon_dirs)}> which " + " does not contain any Python or C source code files." ) return addon_dirs @@ -1502,7 +1502,7 @@ def filter_multi_addon_addons(mlist): # to check if metadata is available if there is no executable module. for addon in get_multi_addon_addons_which_install_only_html_man_page(): if addon in mlist: - gs.debug(f"Addon name <{addon}> which install only HTML man page.") + gs.debug(f"Addon name <{addon}> which installs only HTML man page.") mlist.pop(mlist.index(addon)) return mlist From bc19b1f2db7abce629e339fe5164ea9e4588d6bd Mon Sep 17 00:00:00 2001 From: Tomas Zigo Date: Fri, 3 Jan 2025 18:51:18 +0100 Subject: [PATCH 3/4] Extend test_github_install_official_multimodule_and_check_metadata() test --- scripts/g.extension/testsuite/test_addons_download.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scripts/g.extension/testsuite/test_addons_download.py b/scripts/g.extension/testsuite/test_addons_download.py index 07be93cf878..133dd25bf38 100644 --- a/scripts/g.extension/testsuite/test_addons_download.py +++ b/scripts/g.extension/testsuite/test_addons_download.py @@ -48,6 +48,8 @@ class TestModuleDownloadFromDifferentSources(TestCase): def setUp(self): """Make sure we are not dealing with some old files""" + g_gisenv = SimpleModule("g.gisenv", set="DEBUG=1") + self.assertModule(g_gisenv) if self.install_prefix.exists(): files = [path.name for path in self.install_prefix.iterdir()] if files: @@ -58,6 +60,8 @@ def setUp(self): def tearDown(self): """Remove created files""" + g_gisenv = SimpleModule("g.gisenv", set="DEBUG=0") + self.assertModule(g_gisenv) silent_rmtree(str(self.install_prefix)) @unittest.skipIf(ms_windows, "currently not supported on MS Windows") @@ -232,6 +236,10 @@ def test_github_install_official_multimodule_and_check_metadata(self): _("No metadata available for module '{}':").format(extension), gextension.outputs.stderr, ) + self.assertIn( + f"Addon name <{extension}> which install only HTML man page.", + gextension.outputs.stderr, + ) if __name__ == "__main__": From 92019bcf335c0eb4c6f9cc776524584e4c9cc09c Mon Sep 17 00:00:00 2001 From: Tomas Zigo Date: Fri, 3 Jan 2025 19:14:43 +0100 Subject: [PATCH 4/4] Fix typos --- scripts/g.extension/g.extension.py | 6 +++--- scripts/g.extension/testsuite/test_addons_download.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/g.extension/g.extension.py b/scripts/g.extension/g.extension.py index 7577902f712..5d4b3fc79e3 100644 --- a/scripts/g.extension/g.extension.py +++ b/scripts/g.extension/g.extension.py @@ -1447,7 +1447,7 @@ def install_extension_xml(edict): def get_multi_addon_addons_which_install_only_html_man_page(): - """Get multi-addon addons which install only manual html page + """Get multi-addon addons which installs only manual HTML page :return list addon_dirs: list of addon directories which does not contain any Python or C source code @@ -1475,7 +1475,7 @@ def get_multi_addon_addons_which_install_only_html_man_page(): addon_paths.index(addon_src_file.group(0).replace("\n", "")) ) gs.debug( - f"Addon dicrectory names <{', '.join(addon_dirs)}> which " + f"Addon directory names <{', '.join(addon_dirs)}> which " " does not contain any Python or C source code files." ) return addon_dirs @@ -2432,7 +2432,7 @@ def update_manual_page(module): # Multi-addon if len(addons) > 1: for a in get_multi_addon_addons_which_install_only_html_man_page(): - # Add multi-addon addons which install only manual html page + # Add multi-addon addons which installs only manual HTML page addons.append(a) for match in re.finditer(pattern, shtml): diff --git a/scripts/g.extension/testsuite/test_addons_download.py b/scripts/g.extension/testsuite/test_addons_download.py index 133dd25bf38..d96ed5c133d 100644 --- a/scripts/g.extension/testsuite/test_addons_download.py +++ b/scripts/g.extension/testsuite/test_addons_download.py @@ -237,7 +237,7 @@ def test_github_install_official_multimodule_and_check_metadata(self): gextension.outputs.stderr, ) self.assertIn( - f"Addon name <{extension}> which install only HTML man page.", + f"Addon name <{extension}> which installs only HTML man page.", gextension.outputs.stderr, )