1 # -*- python -*- 2 3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 4 # Use of this source code is governed by a BSD-style license that can be 5 # found in the LICENSE file. 6 7 # Example configuration file for Croc 8 9 # Basic formatting rules: 10 # * It looks like JSON. 11 # * It's really python. 12 # * Dictionaries are wrapped in {}. Order does not matter. Entries are of 13 # the form: 14 # 'key':value, 15 # Note the trailing comma, which will help save you from python's built-in 16 # string concatenation. 17 # * Lists are wrapped in []. Order does matter. Entries should be followed 18 # with a trailing comma, which will help save you from python's built-in 19 # string concatenation. 20 # * Comments start with # and extend to end of line. 21 # * Strings are wrapped in ''. Backslashes must be escaped ('foo\\bar', not 22 # 'foo\bar') - this is particularly important in rule regular expressions. 23 24 25 # What follows is the main configuration dictionary. 26 { 27 # List of root directories, applied in order. 28 # 29 # Typically, coverage data files contain absolute paths to the sources. 30 # What you care about is usually a relative path from the top of your source 31 # tree (referred to here as a 'source root') to the sources. 32 # 33 # Roots may also be specified on the command line via the --root option. 34 # Roots specified by --root are applied before those specified in config 35 # files. 36 'roots' : [ 37 # Each entry is a dict. 38 # * It must contain a 'root' entry, which is the start of a path. 39 # * Root entries may be absolute paths 40 # * Root entries starting with './' or '../' are relative paths, and 41 # are taken relative to the current directory where you run croc. 42 # * Root entries may start with previously defined altnames. 43 # * Use '/' as a path separator, even on Windows. 44 # * It may contain a 'altname' entry. If the root matches the start of 45 # a filename, that start is replaced with the 'altname', or with '_' 46 # if no default is specified. 47 # * Multiple root entries may share the same altname. This is commonly 48 # used when combining LCOV files from different platforms into one 49 # coverage report, when each platform checks out source code into a 50 # different source tree. 51 {'root' : 'c:/P4/EarthHammer'}, 52 {'root' : 'd:/pulse/recipes/330137642/base'}, 53 {'root' : '/Volumes/BuildData/PulseData/data/recipes/330137640/base'}, 54 {'root' : '/usr/local/google/builder/.pulse-agent/data/recipes/330137641/base'}, 55 56 # Sub-paths we specifically care about and want to call out. Note that 57 # these are relative to the default '_' altname. 58 { 59 'root' : '_/googleclient/third_party/software_construction_toolkit/files', 60 'altname' : 'SCT', 61 }, 62 { 63 'root' : '_/googleclient/tools/hammer', 64 'altname' : 'HAMMER', 65 }, 66 ], 67 68 # List of rules, applied in order. 69 'rules' : [ 70 # Each rule is a dict. 71 # * It must contaihn a 'regexp' entry. Filenames which match this 72 # regular expression (after applying mappings from 'roots') are 73 # affected by the rule. 74 # 75 # * Other entries in the dict are attributes to apply to matching files. 76 # 77 # Allowed attributes: 78 # 79 # 'include' : If 1, the file will be included in coverage reports. If 0, 80 # it won't be included in coverage reports. 81 # 82 # 'group' : Name of the group the file belongs to. The most common 83 # group names are 'source' and 'test'. Files must belong to 84 # a group to be included in coverage reports. 85 # 86 # 'language' : Programming language for the file. The most common 87 # languages are 'C', 'C++', 'python', 'ObjC', 'ObjC++'. 88 # Files must have a language to be included in coverage 89 # reports. 90 # 91 # 'add_if_missing' : If 1, and the file was not referenced by any LCOV 92 # files, it will be be scanned for executable lines 93 # and added to the coverage report. If 0, if the 94 # file is not referenced by any LCOV files, it will 95 # simply be ignored and not present in coverage 96 # reports. 97 98 # Files/paths to include 99 { 100 'regexp' : '^(SCT|HAMMER)/', 101 'include' : 1, 102 'add_if_missing': 1, 103 }, 104 { 105 'regexp' : '.*/(\\.svn|\\.hg)/', 106 'include' : 0, 107 }, 108 109 # Groups 110 { 111 'regexp' : '', 112 'group' : 'source', 113 }, 114 { 115 'regexp' : '.*_(test|test_mac|unittest)\\.', 116 'group' : 'test', 117 }, 118 119 # Languages 120 { 121 'regexp' : '.*\\.py$', 122 'language' : 'python', 123 }, 124 ], 125 126 # List of paths to add source from. 127 # 128 # Each entry is a path. It may be a local path, or one relative to a root 129 # altname (see 'roots' above). 130 # 131 # If more than one root's altname matches the start of this path, all matches 132 # will be attempted; matches where the candidate directory doesn't exist will 133 # be ignored. For example, if you're combining data from multiple platforms' 134 # LCOV files, you probably defined at least one root per LCOV, but only have 135 # one copy of the source on your local platform. That's fine; Croc will use 136 # the source it can find and not worry about the source it can't. 137 # 138 # Source files must be added via 'add_files' to generate line-by-line HTML 139 # output (via the --html option) and/or to scan for missing executable lines 140 # (if 'add_if_missing' is 1). 141 'add_files' : [ 142 'SCT', 143 'HAMMER', 144 ], 145 146 # Statistics to print. 147 # 148 'print_stats' : [ 149 # Each entry is a dict. 150 # 151 # It must have a 'stat' entry, which is the statistic to print. This may 152 # be one of the following stats: 153 # 154 # * files_executable 155 # * files_instrumented 156 # * files_covered 157 # * lines_executable 158 # * lines_instrumented 159 # * lines_covered 160 # 161 # or an expression using those stats. 162 # 163 # It may have a 'format' entry, which is a python formatting string (very 164 # printf-like) for the statistic. 165 # 166 # It may have a 'group' entry. If this is specified, only files from the 167 # matching group will be included in the statistic. If not specified, the 168 # group defaults to 'all', which means all groups. 169 { 170 'stat' : 'files_executable', 171 'format' : '*RESULT FilesKnown: files_executable= %d files', 172 }, 173 { 174 'stat' : 'files_instrumented', 175 'format' : '*RESULT FilesInstrumented: files_instrumented= %d files', 176 }, 177 { 178 'stat' : '100.0 * files_instrumented / files_executable', 179 'format' : '*RESULT FilesInstrumentedPercent: files_instrumented_percent= %g', 180 }, 181 { 182 'stat' : 'lines_instrumented', 183 'format' : '*RESULT LinesInstrumented: lines_instrumented= %d lines', 184 }, 185 { 186 'stat' : 'lines_covered', 187 'format' : '*RESULT LinesCoveredSource: lines_covered_source= %d lines', 188 'group' : 'source', 189 }, 190 { 191 'stat' : 'lines_covered', 192 'format' : '*RESULT LinesCoveredTest: lines_covered_test= %d lines', 193 'group' : 'test', 194 }, 195 ], 196 197 } 198