# -*- python -*- # Copyright (c) 2012 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # Example configuration file for Croc # Basic formatting rules: # * It looks like JSON. # * It's really python. # * Dictionaries are wrapped in {}. Order does not matter. Entries are of # the form: # 'key':value, # Note the trailing comma, which will help save you from python's built-in # string concatenation. # * Lists are wrapped in []. Order does matter. Entries should be followed # with a trailing comma, which will help save you from python's built-in # string concatenation. # * Comments start with # and extend to end of line. # * Strings are wrapped in ''. Backslashes must be escaped ('foo\\bar', not # 'foo\bar') - this is particularly important in rule regular expressions. # What follows is the main configuration dictionary. { # List of root directories, applied in order. # # Typically, coverage data files contain absolute paths to the sources. # What you care about is usually a relative path from the top of your source # tree (referred to here as a 'source root') to the sources. # # Roots may also be specified on the command line via the --root option. # Roots specified by --root are applied before those specified in config # files. 'roots' : [ # Each entry is a dict. # * It must contain a 'root' entry, which is the start of a path. # * Root entries may be absolute paths # * Root entries starting with './' or '../' are relative paths, and # are taken relative to the current directory where you run croc. # * Root entries may start with previously defined altnames. # * Use '/' as a path separator, even on Windows. # * It may contain a 'altname' entry. If the root matches the start of # a filename, that start is replaced with the 'altname', or with '_' # if no default is specified. # * Multiple root entries may share the same altname. This is commonly # used when combining LCOV files from different platforms into one # coverage report, when each platform checks out source code into a # different source tree. {'root' : 'c:/P4/EarthHammer'}, {'root' : 'd:/pulse/recipes/330137642/base'}, {'root' : '/Volumes/BuildData/PulseData/data/recipes/330137640/base'}, {'root' : '/usr/local/google/builder/.pulse-agent/data/recipes/330137641/base'}, # Sub-paths we specifically care about and want to call out. Note that # these are relative to the default '_' altname. { 'root' : '_/googleclient/third_party/software_construction_toolkit/files', 'altname' : 'SCT', }, { 'root' : '_/googleclient/tools/hammer', 'altname' : 'HAMMER', }, ], # List of rules, applied in order. 'rules' : [ # Each rule is a dict. # * It must contaihn a 'regexp' entry. Filenames which match this # regular expression (after applying mappings from 'roots') are # affected by the rule. # # * Other entries in the dict are attributes to apply to matching files. # # Allowed attributes: # # 'include' : If 1, the file will be included in coverage reports. If 0, # it won't be included in coverage reports. # # 'group' : Name of the group the file belongs to. The most common # group names are 'source' and 'test'. Files must belong to # a group to be included in coverage reports. # # 'language' : Programming language for the file. The most common # languages are 'C', 'C++', 'python', 'ObjC', 'ObjC++'. # Files must have a language to be included in coverage # reports. # # 'add_if_missing' : If 1, and the file was not referenced by any LCOV # files, it will be be scanned for executable lines # and added to the coverage report. If 0, if the # file is not referenced by any LCOV files, it will # simply be ignored and not present in coverage # reports. # Files/paths to include { 'regexp' : '^(SCT|HAMMER)/', 'include' : 1, 'add_if_missing': 1, }, { 'regexp' : '.*/(\\.svn|\\.hg)/', 'include' : 0, }, # Groups { 'regexp' : '', 'group' : 'source', }, { 'regexp' : '.*_(test|test_mac|unittest)\\.', 'group' : 'test', }, # Languages { 'regexp' : '.*\\.py$', 'language' : 'python', }, ], # List of paths to add source from. # # Each entry is a path. It may be a local path, or one relative to a root # altname (see 'roots' above). # # If more than one root's altname matches the start of this path, all matches # will be attempted; matches where the candidate directory doesn't exist will # be ignored. For example, if you're combining data from multiple platforms' # LCOV files, you probably defined at least one root per LCOV, but only have # one copy of the source on your local platform. That's fine; Croc will use # the source it can find and not worry about the source it can't. # # Source files must be added via 'add_files' to generate line-by-line HTML # output (via the --html option) and/or to scan for missing executable lines # (if 'add_if_missing' is 1). 'add_files' : [ 'SCT', 'HAMMER', ], # Statistics to print. # 'print_stats' : [ # Each entry is a dict. # # It must have a 'stat' entry, which is the statistic to print. This may # be one of the following stats: # # * files_executable # * files_instrumented # * files_covered # * lines_executable # * lines_instrumented # * lines_covered # # or an expression using those stats. # # It may have a 'format' entry, which is a python formatting string (very # printf-like) for the statistic. # # It may have a 'group' entry. If this is specified, only files from the # matching group will be included in the statistic. If not specified, the # group defaults to 'all', which means all groups. { 'stat' : 'files_executable', 'format' : '*RESULT FilesKnown: files_executable= %d files', }, { 'stat' : 'files_instrumented', 'format' : '*RESULT FilesInstrumented: files_instrumented= %d files', }, { 'stat' : '100.0 * files_instrumented / files_executable', 'format' : '*RESULT FilesInstrumentedPercent: files_instrumented_percent= %g', }, { 'stat' : 'lines_instrumented', 'format' : '*RESULT LinesInstrumented: lines_instrumented= %d lines', }, { 'stat' : 'lines_covered', 'format' : '*RESULT LinesCoveredSource: lines_covered_source= %d lines', 'group' : 'source', }, { 'stat' : 'lines_covered', 'format' : '*RESULT LinesCoveredTest: lines_covered_test= %d lines', 'group' : 'test', }, ], }