diff --git a/scripts/g.extension/g.extension.py b/scripts/g.extension/g.extension.py index 3d49d5cd2a1..208f368c625 100644 --- a/scripts/g.extension/g.extension.py +++ b/scripts/g.extension/g.extension.py @@ -1446,27 +1446,38 @@ 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 addons: list of multi-addon addons which install - only manual html page + :return list addon_dirs: list of addon directories which does + not contain any Python or 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 directory named <{', '.join(addon_dirs)}> which" + " does not contain any Python or C source code files." + ) + return addon_dirs def filter_multi_addon_addons(mlist): @@ -1490,6 +1501,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 installs only HTML man page.") mlist.pop(mlist.index(addon)) return mlist @@ -2433,7 +2445,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 4790b0615fc..959c43814f1 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: @@ -57,6 +59,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") @@ -231,6 +235,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}> has been installed with only an HTML manual page.", + gextension.outputs.stderr, + ) if __name__ == "__main__":