Skip to content

Commit

Permalink
Use lcov visualizer for gcov statistics
Browse files Browse the repository at this point in the history
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
  • Loading branch information
mame committed Jul 4, 2017
1 parent 2b8bf0f commit f85bc29
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Expand Up @@ -39,6 +39,7 @@ y.tab.c
*.gcda
*.gcno
*.gcov
lcov*.info

# /
/*-fake.rb
Expand Down Expand Up @@ -85,6 +86,7 @@ y.tab.c
/goruby
/id.[ch]
/largefile.h
/lcov-out
/lex.c
/libruby*.*
/miniprelude.c
Expand Down
4 changes: 4 additions & 0 deletions Makefile.in
Expand Up @@ -484,6 +484,10 @@ after-update:: prereq
gcov:
$(Q) $(BASERUBY) $(srcdir)/tool/run-gcov.rb

lcov:
$(Q) $(BASERUBY) $(srcdir)/tool/run-lcov.rb
$(Q) genhtml --ignore-errors source lcov-c-all.info -o lcov-out

update-doclie:
$(Q) $(srcdir)/tool/git-refresh -C $(srcdir)/coverage $(Q1:0=-q) \
--branch $(DOCLIE_GIT_REF) \
Expand Down
41 changes: 41 additions & 0 deletions 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")

0 comments on commit f85bc29

Please sign in to comment.