relevance-rcov 0.8.2.1 → 0.8.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,199 @@
1
+ module Rcov
2
+
3
+ class TextCoverageDiff < BaseFormatter # :nodoc:
4
+ FORMAT_VERSION = [0, 1, 0]
5
+ DEFAULT_OPTS = { :textmode => :coverage_diff, :coverage_diff_mode => :record,
6
+ :coverage_diff_file => "coverage.info", :diff_cmd => "diff", :comments_run_by_default => true }
7
+ HUNK_HEADER = /@@ -\d+,\d+ \+(\d+),(\d+) @@/
8
+
9
+ def SERIALIZER
10
+ # mfp> this was going to be YAML but I caught it failing at basic
11
+ # round-tripping, turning "\n" into "" and corrupting the data, so
12
+ # it must be Marshal for now
13
+ Marshal
14
+ end
15
+
16
+ def initialize(opts = {})
17
+ options = DEFAULT_OPTS.clone.update(opts)
18
+ @textmode = options[:textmode]
19
+ @color = options[:color]
20
+ @mode = options[:coverage_diff_mode]
21
+ @state_file = options[:coverage_diff_file]
22
+ @diff_cmd = options[:diff_cmd]
23
+ @gcc_output = options[:gcc_output]
24
+ super(options)
25
+ end
26
+
27
+ def execute
28
+ case @mode
29
+ when :record
30
+ record_state
31
+ when :compare
32
+ compare_state
33
+ else
34
+ raise "Unknown TextCoverageDiff mode: #{mode.inspect}."
35
+ end
36
+ end
37
+
38
+ def record_state
39
+ state = {}
40
+ each_file_pair_sorted do |filename, fileinfo|
41
+ state[filename] = {:lines => SCRIPT_LINES__[filename], :coverage => fileinfo.coverage.to_a,:counts => fileinfo.counts}
42
+ end
43
+ File.open(@state_file, "w") do |f|
44
+ self.SERIALIZER.dump([FORMAT_VERSION, state], f)
45
+ end
46
+ rescue
47
+ $stderr.puts <<-EOF
48
+ Couldn't save coverage data to #{@state_file}.
49
+ EOF
50
+ end # '
51
+
52
+ require 'tempfile'
53
+ def compare_state
54
+ return unless verify_diff_available
55
+ begin
56
+ format, prev_state = File.open(@state_file){|f| self.SERIALIZER.load(f) }
57
+ rescue
58
+ $stderr.puts <<-EOF
59
+ Couldn't load coverage data from #{@state_file}.
60
+ EOF
61
+ return # '
62
+ end
63
+ if !(Array === format) or
64
+ FORMAT_VERSION[0] != format[0] || FORMAT_VERSION[1] < format[1]
65
+ $stderr.puts <<-EOF
66
+ Couldn't load coverage data from #{@state_file}.
67
+ The file is saved in the format #{format.inspect[0..20]}.
68
+ This rcov executable understands #{FORMAT_VERSION.inspect}.
69
+ EOF
70
+ return # '
71
+ end
72
+ each_file_pair_sorted do |filename, fileinfo|
73
+ old_data = Tempfile.new("#{mangle_filename(filename)}-old")
74
+ new_data = Tempfile.new("#{mangle_filename(filename)}-new")
75
+ if prev_state.has_key? filename
76
+ old_code, old_cov = prev_state[filename].values_at(:lines, :coverage)
77
+ old_code.each_with_index do |line, i|
78
+ prefix = old_cov[i] ? " " : "!! "
79
+ old_data.write "#{prefix}#{line}"
80
+ end
81
+ else
82
+ old_data.write ""
83
+ end
84
+ old_data.close
85
+ SCRIPT_LINES__[filename].each_with_index do |line, i|
86
+ prefix = fileinfo.coverage[i] ? " " : "!! "
87
+ new_data.write "#{prefix}#{line}"
88
+ end
89
+ new_data.close
90
+
91
+ diff = `#{@diff_cmd} -u "#{old_data.path}" "#{new_data.path}"`
92
+ new_uncovered_hunks = process_unified_diff(filename, diff)
93
+ old_data.close!
94
+ new_data.close!
95
+ display_hunks(filename, new_uncovered_hunks)
96
+ end
97
+ end
98
+
99
+ def display_hunks(filename, hunks)
100
+ return if hunks.empty?
101
+ puts
102
+ puts "=" * 80
103
+ puts "!!!!! Uncovered code introduced in #{filename}"
104
+
105
+ hunks.each do |offset, lines|
106
+ if @gcc_output
107
+ lines.each_with_index do |line,i|
108
+ lineno = offset + i
109
+ flag = (/^!! / !~ line) ? "-" : ":"
110
+ prefix = "#{filename}#{flag}#{lineno}#{flag}"
111
+ puts "#{prefix}#{line[3..-1]}"
112
+ end
113
+ elsif @color
114
+ puts "### #{filename}:#{offset}"
115
+ lines.each do |line|
116
+ prefix = (/^!! / !~ line) ? "\e[32;40m" : "\e[31;40m"
117
+ puts "#{prefix}#{line[3..-1].chomp}\e[37;40m"
118
+ end
119
+ else
120
+ puts "### #{filename}:#{offset}"
121
+ puts lines
122
+ end
123
+ end
124
+ end
125
+
126
+ def verify_diff_available
127
+ old_stderr = STDERR.dup
128
+ old_stdout = STDOUT.dup
129
+ # TODO: should use /dev/null or NUL(?), but I don't want to add the
130
+ # win32 check right now
131
+ new_stderr = Tempfile.new("rcov_check_diff")
132
+ STDERR.reopen new_stderr.path
133
+ STDOUT.reopen new_stderr.path
134
+
135
+ retval = system "#{@diff_cmd} --version"
136
+ unless retval
137
+ old_stderr.puts <<EOF
138
+
139
+ The '#{@diff_cmd}' executable seems not to be available.
140
+ You can specify which diff executable should be used with --diff-cmd.
141
+ If your system doesn't have one, you might want to use Diff::LCS's:
142
+ gem install diff-lcs
143
+ and use --diff-cmd=ldiff.
144
+ EOF
145
+ return false
146
+ end
147
+ true
148
+ ensure
149
+ STDOUT.reopen old_stdout
150
+ STDERR.reopen old_stderr
151
+ new_stderr.close!
152
+ end
153
+
154
+
155
+ def process_unified_diff(filename, diff)
156
+ current_hunk = []
157
+ current_hunk_start = 0
158
+ keep_current_hunk = false
159
+ state = :init
160
+ interesting_hunks = []
161
+ diff.each_with_index do |line, i|
162
+ #puts "#{state} %5d #{line}" % i
163
+ case state
164
+ when :init
165
+ if md = HUNK_HEADER.match(line)
166
+ current_hunk = []
167
+ current_hunk_start = md[1].to_i
168
+ state = :body
169
+ end
170
+ when :body
171
+ case line
172
+ when HUNK_HEADER
173
+ new_start = $1.to_i
174
+ if keep_current_hunk
175
+ interesting_hunks << [current_hunk_start, current_hunk]
176
+ end
177
+ current_hunk_start = new_start
178
+ current_hunk = []
179
+ keep_current_hunk = false
180
+ when /^-/
181
+ # ignore
182
+ when /^\+!! /
183
+ keep_current_hunk = true
184
+ current_hunk << line[1..-1]
185
+ else
186
+ current_hunk << line[1..-1]
187
+ end
188
+ end
189
+ end
190
+ if keep_current_hunk
191
+ interesting_hunks << [current_hunk_start, current_hunk]
192
+ end
193
+
194
+ interesting_hunks
195
+ end
196
+
197
+ end
198
+
199
+ end
@@ -0,0 +1,36 @@
1
+ module Rcov
2
+
3
+ class TextReport < TextSummary # :nodoc:
4
+
5
+ def execute
6
+ print_lines
7
+ print_header
8
+ print_lines
9
+
10
+ each_file_pair_sorted do |fname, finfo|
11
+ name = fname.size < 52 ? fname : "..." + fname[-48..-1]
12
+ print_info(name, finfo.num_lines, finfo.num_code_lines,
13
+ finfo.code_coverage)
14
+ end
15
+
16
+ print_lines
17
+ print_info("Total", num_lines, num_code_lines, code_coverage)
18
+ print_lines
19
+ puts summary
20
+ end
21
+
22
+ def print_info(name, lines, loc, coverage)
23
+ puts "|%-51s | %5d | %5d | %5.1f%% |" % [name, lines, loc, 100 * coverage]
24
+ end
25
+
26
+ def print_lines
27
+ puts "+----------------------------------------------------+-------+-------+--------+"
28
+ end
29
+
30
+ def print_header
31
+ puts "| File | Lines | LOC | COV |"
32
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,15 @@
1
+ module Rcov
2
+
3
+ class TextSummary < BaseFormatter # :nodoc:
4
+
5
+ def execute
6
+ puts summary
7
+ end
8
+
9
+ def summary
10
+ "%.1f%% %d file(s) %d Lines %d LOC" % [code_coverage * 100, @files.size, num_lines, num_code_lines]
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,14 @@
1
+ require 'rcov/formatters/base_formatter'
2
+ require 'rcov/formatters/text_summary'
3
+ require 'rcov/formatters/text_report'
4
+ require 'rcov/formatters/text_coverage_diff'
5
+ require 'rcov/formatters/full_text_report'
6
+ require 'rcov/formatters/html_coverage'
7
+
8
+ module Rcov
9
+
10
+ module Formatters
11
+
12
+ end
13
+
14
+ end
data/lib/rcov/report.rb CHANGED
@@ -3,69 +3,6 @@
3
3
 
4
4
  require 'pathname'
5
5
 
6
-
7
6
  module Rcov
8
-
9
- # Try to fix bugs in the REXML shipped with Ruby 1.8.6
10
- # They affect Mac OSX 10.5.1 users and motivates endless bug reports.
11
- begin
12
- require 'rexml/formatters/transitive'
13
- require 'rexml/formatter/pretty'
14
- rescue LoadError
15
- end
16
-
17
- require File.expand_path(File.join(File.dirname(__FILE__), 'rexml_extensions' ))
18
-
19
- if (RUBY_VERSION == "1.8.6" || RUBY_VERSION == "1.8.7") && defined? REXML::Formatters::Transitive
20
- class REXML::Document
21
- remove_method :write rescue nil
22
- def write( output=$stdout, indent=-1, trans=false, ie_hack=false )
23
- if xml_decl.encoding != "UTF-8" && !output.kind_of?(Output)
24
- output = Output.new( output, xml_decl.encoding )
25
- end
26
- formatter = if indent > -1
27
- #if trans
28
- REXML::Formatters::Transitive.new( indent )
29
- #else
30
- # REXML::Formatters::Pretty.new( indent, ie_hack )
31
- #end
32
- else
33
- REXML::Formatters::Default.new( ie_hack )
34
- end
35
- formatter.write( self, output )
36
- end
37
- end
38
-
39
- class REXML::Formatters::Transitive
40
- remove_method :write_element rescue nil
41
- def write_element( node, output )
42
- output << "<#{node.expanded_name}"
43
-
44
- node.attributes.each_attribute do |attr|
45
- output << " "
46
- attr.write( output )
47
- end unless node.attributes.empty?
48
-
49
- if node.children.empty?
50
- output << "/>"
51
- else
52
- output << ">"
53
- # If compact and all children are text, and if the formatted output
54
- # is less than the specified width, then try to print everything on
55
- # one line
56
- skip = false
57
- @level += @indentation
58
- node.children.each { |child|
59
- write( child, output )
60
- }
61
- @level -= @indentation
62
- output << "</#{node.expanded_name}>"
63
- end
64
- output << "\n"
65
- output << ' '*@level
66
- end
67
- end
68
7
 
69
8
  end
70
-
71
- end
@@ -0,0 +1,102 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
3
+ <head>
4
+ <title><%= title %></title>
5
+ <link href="screen.css" media="screen" rel="stylesheet" type="text/css" />
6
+ <script type='text/javascript'>
7
+ // <![CDATA[
8
+ function toggleCode( id ) {
9
+ if ( document.getElementById )
10
+ elem = document.getElementById( id );
11
+ else if ( document.all )
12
+ elem = eval( "document.all." + id );
13
+ else
14
+ return false;
15
+
16
+ elemStyle = elem.style;
17
+
18
+ if ( elemStyle.display != "block" ) {
19
+ elemStyle.display = "block"
20
+ } else {
21
+ elemStyle.display = "none"
22
+ }
23
+
24
+ return true;
25
+ }
26
+
27
+ // Make cross-references hidden by default
28
+ document.writeln( "<style type=\"text/css\">span.cross-ref { display: none }</style>" )
29
+ // ]]>
30
+ </script>
31
+ </head>
32
+ <body>
33
+ <h3><%= title %></h3>
34
+ <p>Generated on <%= generated_on %> with <a href="<%= rcov::UPSTREAM_URL %>">rcov <%= rcov::VERSION %></a></p>
35
+ <% if output_threshold != 101 %>
36
+ <!-- Note: 101 is the default threshold if you don't enter one -->
37
+ <p>Threshold: <%= output_threshold %>%</p>
38
+ <% end %>
39
+ <hr />
40
+ <pre>
41
+ <span class='marked'>Code reported as executed by Ruby looks like this...</span><span class='marked1'>and this: this line is also marked as covered.</span><span class='inferred'>Lines considered as run by rcov, but not reported by Ruby, look like this,</span><span class='inferred1'>and this: these lines were inferred by rcov (using simple heuristics).</span><span class='uncovered'>Finally, here&apos;s a line marked as not executed.</span>
42
+ </pre>
43
+ <table class='report'>
44
+ <thead>
45
+ <tr>
46
+ <td class='heading'>Name</td>
47
+ <td class='heading'>Total lines</td>
48
+ <td class='heading'>Lines of code</td>
49
+ <td class='heading'>Total coverage</td>
50
+ <td class='heading'>Code coverage</td>
51
+ </tr>
52
+ </thead>
53
+ <tbody>
54
+ <!-- alternate light/dark here -->
55
+ <tr class='light'>
56
+ <td><%= file.name %></td>
57
+ <td class='lines_total'><tt><%= file.num_lines %></tt></td>
58
+ <td class='lines_code'><tt><%= file.num_code_lines %></tt></td>
59
+ <td>
60
+ <table cellspacing='0' cellpadding='0' align='right'>
61
+ <tr>
62
+ <td><tt class='coverage_total'><%= "%3.2f" % file.total_coverage_for_report %>%</tt>&nbsp;</td>
63
+ <td>
64
+ <table cellspacing='0' class='percent_graph' cellpadding='0' width='100'>
65
+ <tr>
66
+ <td class='covered' width='<%= file.total_coverage_for_report.round %>'></td>
67
+ <td class='uncovered' width='<%= 100 - file.total_coverage_for_report.round %>'></td>
68
+ </tr>
69
+ </table>
70
+ </td>
71
+ </tr>
72
+ </table>
73
+ </td>
74
+ <td>
75
+ <table cellspacing='0' cellpadding='0' align='right'>
76
+ <tr>
77
+ <td><tt class='coverage_code'><%= "%3.2f" % file.code_coverage_for_report %>%</tt>&nbsp;</td>
78
+ <td>
79
+ <table cellspacing='0' class='percent_graph' cellpadding='0' width='100'>
80
+ <tr>
81
+ <td class='covered' width='<%= file.code_coverage_for_report.round %>'/>
82
+ <td class='uncovered' width='<%= 100 - file.code_coverage_for_report.round %>'/>
83
+ </tr>
84
+ </table>
85
+ </td>
86
+ </tr>
87
+ </table>
88
+ </td>
89
+ </tr>
90
+ <% file.num_lines.times do |i| %>
91
+ <% line = file.lines[i].chomp %>
92
+ <% count = file.counts[i] %>
93
+ <tr class="<%= line_css(i) %>">
94
+ <td colspan="5"><pre><a name="line<%= i.next %>"></a><%= i.next %> <%= line %></pre></td>
95
+ </tr>
96
+ <% end %>
97
+ </tbody>
98
+ </table>
99
+ <hr/>
100
+ <p>Generated on <%= generated_on %> with <a href="<%= rcov::UPSTREAM_URL %>">rcov <%= rcov::VERSION %></a></p>
101
+ </body>
102
+ </html>
@@ -0,0 +1,100 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
3
+ <head>
4
+ <title><%= title %></title>
5
+ <link href="screen.css" media="screen" rel="stylesheet" type="text/css" />
6
+ <script type='text/javascript'>
7
+ // <![CDATA[
8
+ function toggleCode( id ) {
9
+ if ( document.getElementById )
10
+ elem = document.getElementById( id );
11
+ else if ( document.all )
12
+ elem = eval( "document.all." + id );
13
+ else
14
+ return false;
15
+
16
+ elemStyle = elem.style;
17
+
18
+ if ( elemStyle.display != "block" ) {
19
+ elemStyle.display = "block"
20
+ } else {
21
+ elemStyle.display = "none"
22
+ }
23
+
24
+ return true;
25
+ }
26
+
27
+ // Make cross-references hidden by default
28
+ document.writeln( "<style type=\"text/css\">span.cross-ref { display: none }</style>" )
29
+ // ]]>
30
+ </script>
31
+ </head>
32
+ <body>
33
+ <h3><%= title %></h3>
34
+ <p>Generated on <%= generated_on %> with <a href="<%= rcov::UPSTREAM_URL %>">rcov <%= rcov::VERSION %></a></p>
35
+ <% if output_threshold != 101 %>
36
+ <!-- Note: 101 is the default threshold if you don't enter one -->
37
+ <p>Threshold: <%= output_threshold %>%</p>
38
+ <% end %>
39
+ <hr />
40
+ <table class='report'>
41
+ <thead>
42
+ <tr>
43
+ <td class='heading'>Name</td>
44
+ <td class='heading'>Total lines</td>
45
+ <td class='heading'>Lines of code</td>
46
+ <td class='heading'>Total coverage</td>
47
+ <td class='heading'>Code coverage</td>
48
+ </tr>
49
+ </thead>
50
+ <tbody>
51
+ <% files.each do |f| %>
52
+ <!-- alternate light/dark here -->
53
+ <tr class='light'>
54
+ <td>
55
+ <% if f.name == 'TOTAL' %>
56
+ <%= f.name %>
57
+ <% else %>
58
+ <a href="<%= relative_filename(f.name) %>"><%= f.name %></a>
59
+ <% end %>
60
+ </td>
61
+ <td class='lines_total'><tt><%= f.num_lines %></tt></td>
62
+ <td class='lines_code'><tt><%= f.num_code_lines %></tt></td>
63
+ <td>
64
+ <table cellspacing='0' cellpadding='0' align='right'>
65
+ <tr>
66
+ <td><tt class='coverage_total'><%= "%3.2f" % f.total_coverage_for_report %>%</tt>&nbsp;</td>
67
+ <td>
68
+ <table cellspacing='0' class='percent_graph' cellpadding='0' width='100'>
69
+ <tr>
70
+ <td class='covered' width='<%= f.total_coverage_for_report.round %>'></td>
71
+ <td class='uncovered' width='<%= 100 - f.total_coverage_for_report.round %>'></td>
72
+ </tr>
73
+ </table>
74
+ </td>
75
+ </tr>
76
+ </table>
77
+ </td>
78
+ <td>
79
+ <table cellspacing='0' cellpadding='0' align='right'>
80
+ <tr>
81
+ <td><tt class='coverage_code'><%= "%3.2f" % f.code_coverage_for_report %>%</tt>&nbsp;</td>
82
+ <td>
83
+ <table cellspacing='0' class='percent_graph' cellpadding='0' width='100'>
84
+ <tr>
85
+ <td class='covered' width='<%= f.code_coverage_for_report.round %>'/>
86
+ <td class='uncovered' width='<%= 100 - f.code_coverage_for_report.round %>'/>
87
+ </tr>
88
+ </table>
89
+ </td>
90
+ </tr>
91
+ </table>
92
+ </td>
93
+ </tr>
94
+ <% end %>
95
+ </tbody>
96
+ </table>
97
+ <hr/>
98
+ <p>Generated on <%= generated_on %> with <a href="<%= rcov::UPSTREAM_URL %>">rcov <%= rcov::VERSION %></a></p>
99
+ </body>
100
+ </html>
@@ -0,0 +1,144 @@
1
+ body { background-color: rgb(240, 240, 245); }
2
+
3
+ span.cross-ref-title {
4
+ font-size: 140%;
5
+ }
6
+ span.cross-ref a {
7
+ text-decoration: none;
8
+ }
9
+ span.cross-ref {
10
+ background-color:#f3f7fa;
11
+ border: 1px dashed #333;
12
+ margin: 1em;
13
+ padding: 0.5em;
14
+ overflow: hidden;
15
+ }
16
+ a.crossref-toggle {
17
+ text-decoration: none;
18
+ }
19
+ pre, code {
20
+ -x-system-font:none;
21
+ font-family:Monaco,"Courier New",monospace;
22
+ font-size:65%;
23
+ font-size-adjust:none;
24
+ font-stretch:normal;
25
+ font-style:normal;
26
+ font-variant:normal;
27
+ font-weight:normal;
28
+ }
29
+
30
+ tr.marked td, span.marked {
31
+ background-color: rgb(185, 210, 200);
32
+ }
33
+ span.marked1 {
34
+ background-color: rgb(190, 215, 205);
35
+ display: block;
36
+ }
37
+ tr.inferred td, span.inferred {
38
+ background-color: rgb(255, 255, 240);
39
+ }
40
+ span.inferred1 {
41
+ background-color: rgb(255, 255, 240);
42
+ display: block;
43
+ }
44
+ tr.uncovered td, span.uncovered {
45
+ background-color: rgb(225, 110, 110);
46
+ }
47
+ span.uncovered1 {
48
+ background-color: rgb(235, 120, 120);
49
+ display: block;
50
+ }
51
+ span.overview {
52
+ border-bottom: 8px solid black;
53
+ }
54
+ div.overview {
55
+ border-bottom: 8px solid black;
56
+ }
57
+ body {
58
+ font-family: verdana, arial, helvetica;
59
+ }
60
+
61
+ div.footer {
62
+ font-size: 68%;
63
+ margin-top: 1.5em;
64
+ }
65
+
66
+ h1, h2, h3, h4, h5, h6 {
67
+ margin-bottom: 0.5em;
68
+ }
69
+
70
+ h5 {
71
+ margin-top: 0.5em;
72
+ }
73
+
74
+ .hidden {
75
+ display: none;
76
+ }
77
+
78
+ div.separator {
79
+ height: 10px;
80
+ }
81
+ /* Commented out for better readability, esp. on IE */
82
+ /*
83
+ table tr td, table tr th {
84
+ font-size: 68%;
85
+ }
86
+
87
+ td.value table tr td {
88
+ font-size: 11px;
89
+ }
90
+ */
91
+
92
+ table.percent_graph {
93
+ height: 12px;
94
+ border: #808080 1px solid;
95
+ empty-cells: show;
96
+ }
97
+
98
+ table.percent_graph td.covered {
99
+ height: 10px;
100
+ background: #00f000;
101
+ }
102
+
103
+ table.percent_graph td.uncovered {
104
+ height: 10px;
105
+ background: #e00000;
106
+ }
107
+
108
+ table.percent_graph td.NA {
109
+ height: 10px;
110
+ background: #eaeaea;
111
+ }
112
+
113
+ table.report {
114
+ border-collapse: collapse;
115
+ width: 100%;
116
+ }
117
+
118
+ table.report td.heading {
119
+ background: #dcecff;
120
+ border: #d0d0d0 1px solid;
121
+ font-weight: bold;
122
+ text-align: center;
123
+ }
124
+
125
+ table.report td.heading:hover {
126
+ background: #c0ffc0;
127
+ }
128
+
129
+ table.report td.text {
130
+ border: #d0d0d0 1px solid;
131
+ }
132
+
133
+ table.report td.value,
134
+ table.report td.lines_total,
135
+ table.report td.lines_code {
136
+ text-align: right;
137
+ border: #d0d0d0 1px solid;
138
+ }
139
+ table.report tr.light {
140
+ background-color: rgb(240, 240, 245);
141
+ }
142
+ table.report tr.dark {
143
+ background-color: rgb(230, 230, 235);
144
+ }
data/lib/rcov/version.rb CHANGED
@@ -3,9 +3,10 @@
3
3
  # See LEGAL and LICENSE for licensing information.
4
4
 
5
5
  module Rcov
6
- VERSION = "0.8.2.1"
7
- RELEASE_DATE = "2009-03-17"
6
+ VERSION = "0.8.3.0"
7
+ RELEASE_DATE = "2009-05-08"
8
8
  RCOVRT_ABI = [2,0,0]
9
- UPSTREAM_URL = "http://github.com/spicycode/rcov"
9
+ UPSTREAM_URL = "http://github.com/relevance/rcov"
10
+ ROOF_POSITION = 'raised'
10
11
 
11
12
  end