When using --create-testdir with a bad module name:

$ gnulib-tool.py --create-testdir --dir aaa bad-module-name
gnulib-tool: warning: module bad-module-name doesn't exist
Traceback (most recent call last):
  File "/home/collin/.local/src/gnulib/.gnulib-tool.py", line 30, in <module>
    main.main_with_exception_handling()
  File "/home/collin/.local/src/gnulib/pygnulib/main.py", line 1382, in 
main_with_exception_handling
    main()
  File "/home/collin/.local/src/gnulib/pygnulib/main.py", line 1075, in main
    testdir.execute()
  File "/home/collin/.local/src/gnulib/pygnulib/GLTestDir.py", line 209, in 
execute
    requested_licence = requested_module.getLicense()
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'getLicense'

This patch removes None from the list of GLModule objects before using
them.

I also documented the meaning of a None return in
GLModuleSystem.find() since this problem occurred in GLImport
previously.

Collin
From f9ff066e21adcd12de167ceea5a4c64a1f012a6b Mon Sep 17 00:00:00 2001
From: Collin Funk <collin.fu...@gmail.com>
Date: Sat, 20 Apr 2024 20:29:44 -0700
Subject: [PATCH] gnulib-tool.py: Don't fail when given a bad module name.

* pygnulib/GLTestDir.py (GLTestDir.execute): Don't include None in the
list of GLModule objects.
* pygnulib/GLModuleSystem.py (GLModuleSystem.find): Document the meaning
of the None return.
---
 ChangeLog                  | 8 ++++++++
 pygnulib/GLModuleSystem.py | 4 +++-
 pygnulib/GLTestDir.py      | 9 ++++++---
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 2ede5219a3..6523c89b87 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2024-04-20  Collin Funk  <collin.fu...@gmail.com>
+
+	gnulib-tool.py: Don't fail when given a bad module name.
+	* pygnulib/GLTestDir.py (GLTestDir.execute): Don't include None in the
+	list of GLModule objects.
+	* pygnulib/GLModuleSystem.py (GLModuleSystem.find): Document the meaning
+	of the None return.
+
 2024-04-20  Collin Funk  <collin.fu...@gmail.com>
 
 	gnulib-tool.py: Update type hints and docstring.
diff --git a/pygnulib/GLModuleSystem.py b/pygnulib/GLModuleSystem.py
index 301592a79d..daee7b403e 100644
--- a/pygnulib/GLModuleSystem.py
+++ b/pygnulib/GLModuleSystem.py
@@ -88,7 +88,9 @@ def exists(self, module: str) -> bool:
         return result
 
     def find(self, module: str) -> GLModule | None:
-        '''Find the given module.'''
+        '''Return the GLModule object given the module name. If the module
+        description file could not be found None is returned.
+        - module, The name of the module.'''
         if type(module) is not str:
             raise TypeError('module must be a string, not %s'
                             % type(module).__name__)
diff --git a/pygnulib/GLTestDir.py b/pygnulib/GLTestDir.py
index 8bbef2a311..9673a5bd26 100644
--- a/pygnulib/GLTestDir.py
+++ b/pygnulib/GLTestDir.py
@@ -185,9 +185,12 @@ def execute(self) -> None:
                                                    'mountlist', 'lib-ignore']]
 
         # Canonicalize the list of specified modules.
-        specified_modules = sorted(set(specified_modules))
-        specified_modules = [ self.modulesystem.find(m)
-                              for m in specified_modules ]
+        modules = set()
+        for name in specified_modules:
+            module = self.modulesystem.find(name)
+            if module is not None:
+                modules.add(module)
+        specified_modules = sorted(modules)
 
         # Test modules which invoke AC_CONFIG_FILES cannot be used with
         # --with-tests --single-configure. Avoid them.
-- 
2.44.0

Reply via email to