1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/tool/run-gcov.rb
mame 0ee154bee2 tool/run-gcov.rb: ignore rubyspec_temp directory
rubyspec compiles the extension libraries for capi specs in a temporary
directory, and after that, deletes the directory.  gcov resurrects the
directory to save coverage statistics (.gcda files).  However, the
source and profiling artifacts (.gcno files) have been deleted.
So, we need to ignore the .gcda files.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59260 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-07-04 16:02:18 +00:00

54 lines
1.1 KiB
Ruby

#!ruby
require "pathname"
require "open3"
Pathname.glob("**/*.gcda").sort.each do |gcda|
if gcda.fnmatch("ext/*")
cwd, gcda = gcda.split.map {|s| s.to_s }
objdir = "."
elsif gcda.fnmatch("rubyspec_temp/*")
next
else
cwd, objdir, gcda = ".", gcda.dirname.to_s, gcda.to_s
end
puts "$ gcov -lpbc -o #{ objdir } #{ gcda }"
out, err, _status = Open3.capture3("gcov", "-lpbc", "-o", objdir, gcda, chdir: cwd)
puts out
puts err
# a black list of source files that contains wrong #line directives
if err !~ %r(
\A(
Cannot\ open\ source\ file\ (
defs/keywords
|zonetab\.list
|enc/jis/props\.kwd
|parser\.c
|parser\.rl
)\n
)*\z
)x
raise "Unexpected gcov output"
end
if out !~ %r(
\A(
File\ .*\nLines\ executed:.*\n
(
Branches\ executed:.*\n
Taken\ at\ least\ once:.*\n
|
No\ branches\n
)?
(
Calls\ executed:.*\n
|
No\ calls\n
)?
Creating\ .*\n
\n
)+\z
)x
raise "Unexpected gcov output"
end
end