Skip to content
Snippets Groups Projects

Return the last coverage in trace stream

All threads resolved!
1 file
+ 16
25
Compare changes
  • Side-by-side
  • Inline
@@ -92,41 +92,32 @@ def extract_coverage(regex)
@@ -92,41 +92,32 @@ def extract_coverage(regex)
private
private
def read_last_lines(limit)
def read_last_lines(limit)
result = ''
to_enum(:reverse_line).first(limit).reverse.join
reverse_line do |line|
result = line + result
limit -= 1
return result if limit <= 0
end
result
end
end
def reverse_line
def reverse_line
pos = BUFFER_SIZE
pos = 0
max = stream.size
max = stream.size
debris = ''
debris = ''
 
 
return if max <= 0
while pos < max
while (read_size = calc_read_size(pos, max)) > 0
 
pos += read_size
stream.seek(-pos, IO::SEEK_END)
stream.seek(-pos, IO::SEEK_END)
stream.read(BUFFER_SIZE).tap do |buf|
buf = stream.read(read_size) + debris
buf = buf + debris
debris, *lines = buf.each_line.to_a
debris, *lines = buf.each_line.to_a
lines.reverse_each do |line|
lines.reverse_each do |line|
yield(line)
end
end
pos += BUFFER_SIZE
end
# Reached the head, read only left
stream.seek(0)
last = (max > BUFFER_SIZE) ? (max % BUFFER_SIZE) : max
stream.read(last).tap do |buf|
buf = buf + debris
buf.each_line.reverse_each do |line|
yield(line)
yield(line)
end
end
end
end
 
 
yield(debris)
 
end
 
 
def calc_read_size(pos, max)
 
remain = max - pos
 
(remain > BUFFER_SIZE) ? BUFFER_SIZE : remain
end
end
end
end
end
end
Loading