diff --git a/testing/scripts/coverage-calc b/testing/scripts/coverage-calc index 53e818fc32..cc5253c75c 100755 --- a/testing/scripts/coverage-calc +++ b/testing/scripts/coverage-calc @@ -7,7 +7,7 @@ # # The last argument is used to point to a root directory containing all # the Bro distribution's scripts. It's used to cull out test scripts -# that are not part of the distribution and which should not count towrads +# that are not part of the distribution and which should not count towards # the coverage calculation. import os @@ -24,22 +24,30 @@ for filename in glob.glob(inputglob): for line in f.read().splitlines(): parts = line.split("\t") exec_count = int(parts[0]) - location = os.path.normpath(parts[1]) + # grab file path and line numbers separately + filepath, srclines = parts[1].rsplit(",", 1) + filepath = os.path.normpath(filepath) # ignore scripts that don't appear to be part of Bro distribution - if not location.startswith(scriptdir): + if not filepath.startswith(scriptdir): continue + # keep only the line number (or line number range) + srclines = srclines.split()[1] + # For sorting purposes (so that line numbers get sorted correctly), + # construct a specially-formatted key string. + sortkey = filepath + ", line " + ("%6s" % srclines.split("-")[0]) + location = filepath + ", line " + srclines desc = parts[2] - # keying by location + desc may result in duplicate data + # Keying by location + desc may result in duplicate data # as some descs change as a result of differing configurations # producing record (re)definitions key = location if key in stats: stats[key][0] += exec_count else: - stats[key] = [exec_count, location, desc] + stats[key] = [exec_count, location, desc, sortkey] with open(outputfile, 'w') as f: - for k in sorted(stats, key=lambda i: stats[i][1]): + for k in sorted(stats, key=lambda i: stats[i][3]): f.write("%s\t%s\t%s\n" % (stats[k][0], stats[k][1], stats[k][2])) num_covered = 0