relevance-rcov 0.8.2.1 → 0.8.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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