@@ -226,19 +226,40 @@ def run_tests_with_coverage(core, *runner_args):
226226 return status
227227
228228
229+ class CombiningMessageFilter :
230+ """Coverage.combine() is all-or-nothing on messages. Summarize them."""
231+
232+ def __init__ (self ) -> None :
233+ self .combined = 0
234+ self .skipped = 0
235+
236+ def message (self , msg : str ) -> None :
237+ """All messages come through here, keep the data we want."""
238+ if re .match (r"Combined data file" , msg ):
239+ self .combined += 1
240+ elif re .match (r"Skipping duplicate data" , msg ):
241+ self .skipped += 1
242+ else :
243+ print (msg )
244+
245+ def combining_summary (self ) -> None :
246+ """Show the final combination total"""
247+ print (f"Combined { self .combined } files, skipped { self .skipped } " )
248+
249+
229250def do_combine_html ():
230251 """Combine data from a meta-coverage run, and make the HTML report."""
231252 import coverage
232253
233254 os .environ ["COVERAGE_HOME" ] = os .getcwd ()
255+ # Get all messages but filter them ourselves. Better would be to have
256+ # tighter control over message verbosity...
234257 cov = coverage .Coverage (config_file = "metacov.ini" , messages = True )
235- cov .load ()
258+ message_filter = CombiningMessageFilter ()
259+ cov ._message = message_filter .message
236260 cov .combine ()
261+ message_filter .combining_summary ()
237262 cov .save ()
238- # A new Coverage to turn on messages. Better would be to have tighter
239- # control over message verbosity...
240- cov = coverage .Coverage (config_file = "metacov.ini" , messages = True )
241- cov .load ()
242263 show_contexts = bool (
243264 os .getenv ("COVERAGE_DYNCTX" ) or os .getenv ("COVERAGE_CONTEXT" ),
244265 )
0 commit comments