From: Bruno Haible Date: Thu, 11 Apr 2024 19:49:45 +0000 (+0200) Subject: gnulib-tool.py: Optimize module set lookups. X-Git-Tag: v1.0~123 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=f948d1813a3545c75ba79087e6cb52b51d44dfe6;p=gnulib.git gnulib-tool.py: Optimize module set lookups. * gnulib-tool.py (profiler_args): New variable. * pygnulib/GLModuleSystem.py (GLModuleTable.transitive_closure): Turn handledmodules into a set. (GLModuleTable.transitive_closure_separately): For the 'in' test, use a set variable main_modules_set. --- diff --git a/ChangeLog b/ChangeLog index f416f5c8f1..9edb2fac9c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2024-04-11 Bruno Haible + + gnulib-tool.py: Optimize module set lookups. + * gnulib-tool.py (profiler_args): New variable. + * pygnulib/GLModuleSystem.py (GLModuleTable.transitive_closure): Turn + handledmodules into a set. + (GLModuleTable.transitive_closure_separately): For the 'in' test, use + a set variable main_modules_set. + 2024-04-11 Collin Funk gnulib-tool.py: Remove redundant backslashes from regexps. diff --git a/gnulib-tool.py b/gnulib-tool.py index bb2837a3d5..cdcd316909 100755 --- a/gnulib-tool.py +++ b/gnulib-tool.py @@ -144,4 +144,7 @@ else func_fatal_error "python3 not found; try setting GNULIB_TOOL_IMPL=sh" fi -exec python3 "$gnulib_dir/.gnulib-tool.py" "$@" +profiler_args= +# For profiling, cf. . +#profiler_args="-m cProfile -s tottime" +exec python3 $profiler_args "$gnulib_dir/.gnulib-tool.py" "$@" diff --git a/pygnulib/GLModuleSystem.py b/pygnulib/GLModuleSystem.py index 01378259d9..d258fd903f 100644 --- a/pygnulib/GLModuleSystem.py +++ b/pygnulib/GLModuleSystem.py @@ -829,7 +829,7 @@ class GLModuleTable: # module on the input list has been processed, it is added to the # "handled list", so we can avoid to process it again. inc_all_tests = self.inc_all_direct_tests - handledmodules = [] + handledmodules = set() inmodules = modules outmodules = [] if self.config['conddeps']: @@ -910,11 +910,11 @@ class GLModuleTable: self.addConditional(module, depmodule, True) else: # if not conditional self.addUnconditional(depmodule) - handledmodules = sorted(set(handledmodules + inmodules_this_round)) + handledmodules = handledmodules.union(inmodules_this_round) # Remove handledmodules from inmodules. - inmodules = [module - for module in inmodules - if module not in handledmodules] + inmodules = [ module + for module in inmodules + if module not in handledmodules ] inmodules = sorted(set(inmodules)) inc_all_tests = self.inc_all_indirect_tests modules = sorted(set(outmodules)) @@ -950,10 +950,11 @@ class GLModuleTable: main_modules = self.transitive_closure(basemodules) self.config.setInclTestCategory(TESTS['tests'], saved_inctests) # Determine tests-related module list. + main_modules_set = set(main_modules) tests_modules = \ [ m for m in finalmodules - if not (m in main_modules and m.getApplicability() == 'main') ] + if not (m in main_modules_set and m.getApplicability() == 'main') ] # Note: Since main_modules is (hopefully) a subset of finalmodules, this # ought to be the same as # [ m