create-cov-rpt.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #!/usr/bin/env python
  2. #
  3. # Copyright 2019-2019 by Martin Moene
  4. #
  5. # Distributed under the Boost Software License, Version 1.0.
  6. # (See accompanying file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  7. #
  8. # script/create-cov-rpt.py, Python 3.4 and later
  9. #
  10. import argparse
  11. import os
  12. import re
  13. import sys
  14. import subprocess
  15. # Configuration:
  16. cfg_github_project = 'expected-lite'
  17. cfg_github_user = 'martinmoene'
  18. cfg_prj_folder_level = 3
  19. tpl_coverage_cmd = 'opencppcoverage --no_aggregate_by_file --sources {src} -- {exe}'
  20. # End configuration.
  21. def project_folder( f, args ):
  22. """Project root"""
  23. if args.prj_folder:
  24. return args.prj_folder
  25. return os.path.normpath( os.path.join( os.path.dirname( os.path.abspath(f) ), '../' * args.prj_folder_level ) )
  26. def executable_folder( f ):
  27. """Folder where the xecutable is"""
  28. return os.path.dirname( os.path.abspath(f) )
  29. def executable_name( f ):
  30. """Folder where the executable is"""
  31. return os.path.basename( f )
  32. def createCoverageReport( f, args ):
  33. print( "Creating coverage report for project '{usr}/{prj}', '{file}':".
  34. format( usr=args.user, prj=args.project, file=f ) )
  35. cmd = tpl_coverage_cmd.format( folder=executable_folder(f), src=project_folder(f, args), exe=executable_name(f) )
  36. if args.verbose:
  37. print( "> {}".format(cmd) )
  38. if not args.dry_run:
  39. os.chdir( executable_folder(f) )
  40. subprocess.call( cmd, shell=False )
  41. os.chdir( project_folder(f, args) )
  42. def createCoverageReports( args ):
  43. for f in args.executable:
  44. createCoverageReport( f, args )
  45. def createCoverageReportFromCommandLine():
  46. """Collect arguments from the commandline and create coverage report."""
  47. parser = argparse.ArgumentParser(
  48. description='Create coverage report.',
  49. epilog="""""",
  50. formatter_class=argparse.ArgumentDefaultsHelpFormatter)
  51. parser.add_argument(
  52. 'executable',
  53. metavar='executable',
  54. type=str,
  55. nargs=1,
  56. help='executable to report on')
  57. parser.add_argument(
  58. '-n', '--dry-run',
  59. action='store_true',
  60. help='do not execute conan commands')
  61. parser.add_argument(
  62. '-v', '--verbose',
  63. action='count',
  64. default=0,
  65. help='level of progress reporting')
  66. parser.add_argument(
  67. '--user',
  68. metavar='u',
  69. type=str,
  70. default=cfg_github_user,
  71. help='github user name')
  72. parser.add_argument(
  73. '--project',
  74. metavar='p',
  75. type=str,
  76. default=cfg_github_project,
  77. help='github project name')
  78. parser.add_argument(
  79. '--prj-folder',
  80. metavar='f',
  81. type=str,
  82. default=None,
  83. help='project root folder')
  84. parser.add_argument(
  85. '--prj-folder-level',
  86. metavar='n',
  87. type=int,
  88. default=cfg_prj_folder_level,
  89. help='project root folder level from executable')
  90. createCoverageReports( parser.parse_args() )
  91. if __name__ == '__main__':
  92. createCoverageReportFromCommandLine()
  93. # end of file