diff options
author | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-07-04 16:02:19 +0000 |
---|---|---|
committer | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-07-04 16:02:19 +0000 |
commit | f85bc2906bf270f1cc8972b4f496218059cd9bc2 (patch) | |
tree | 02cead8a0b6a4711ba11b581ab37b0343d223516 /tool | |
parent | 2b8bf0fc4ab8831e85bf10c5c48ce8af32fa8eee (diff) | |
download | ruby-f85bc2906bf270f1cc8972b4f496218059cd9bc2.tar.gz |
Use lcov visualizer for gcov statistics
This experimental feature is only for Ruby-core team, not for casual users.
Usage: `./configure --enable-gcov && make && make exam && make lcov`
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59262 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'tool')
-rw-r--r-- | tool/run-lcov.rb | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tool/run-lcov.rb b/tool/run-lcov.rb new file mode 100644 index 0000000000..384d4a9e70 --- /dev/null +++ b/tool/run-lcov.rb @@ -0,0 +1,41 @@ +#!ruby +require "pathname" +require "open3" + +def backup_gcda_files(gcda_files) + gcda_files = gcda_files.map do |gcda| + [gcda, gcda.sub_ext(".bak")] + end + begin + gcda_files.each do |before, after| + before.rename(after) + end + yield + ensure + gcda_files.each do |before, after| + after.rename(before) + end + end +end + +$info_files = [] +def run_lcov(dir, info) + $info_files << info + system("lcov", "-c", "-d", dir, "--rc", "lcov_branch_coverage=1", "-o", info) +end + +gcda_files = Pathname.glob("**/*.gcda") +ext_gcda_files = gcda_files.select {|f| f.fnmatch("ext/*") } +rubyspec_temp_gcda_files = gcda_files.select {|f| f.fnmatch("rubyspec_temp/*") } + +backup_gcda_files(rubyspec_temp_gcda_files) do + backup_gcda_files(ext_gcda_files) do + info = "lcov-root.info" + run_lcov(".", info) + end + ext_gcda_files.group_by {|f| f.descend.to_a[1] }.each do |key, files| + info = "lcov-#{ key.to_s.gsub(File::Separator, "-") }.info" + run_lcov(key.to_s, info) + end +end +system("lcov", *$info_files.flat_map {|f| ["-a", f] }, "-o", "lcov-c-all.info") |