Commit 3d11b7d8 authored by Shinya Maeda's avatar Shinya Maeda

Fix reverse_line from chunk based

parent ddf67424
......@@ -119,16 +119,31 @@ module Gitlab
def reverse_line
pos = BUFFER_SIZE
max = stream.size
debris = ''
while pos < max
stream.seek(-pos, IO::SEEK_END)
yield(stream.read(BUFFER_SIZE))
stream.read(BUFFER_SIZE).tap do |buf|
buf = buf + debris
lines = buf.split("\n")
lines.reverse.each do |line|
yield(line)
end
debris = lines.count > 0 ? lines[0] : ''
end
pos += BUFFER_SIZE
end
# Reached the head, read only left
stream.seek(0)
yield(stream.read(BUFFER_SIZE - (pos - max)))
last = (max > BUFFER_SIZE) ? (max % BUFFER_SIZE) : max
stream.read(last).tap do |buf|
buf = buf + debris
lines = buf.split("\n")
lines.reverse.each do |line|
yield(line)
end
end
end
end
end
......
......@@ -254,6 +254,28 @@ describe Gitlab::Ci::Trace::Stream do
end
end
context 'when BUFFER_SIZE is smaller than stream.size' do
let(:data) { 'Coverage 1033 / 1051 LOC (98.29%) covered\n' }
let(:regex) { '\(\d+.\d+\%\) covered' }
before do
stub_const('Gitlab::Ci::Trace::Stream::BUFFER_SIZE', 5)
end
it { is_expected.to eq("98.29") }
end
context 'when BUFFER_SIZE is equal to stream.size' do
let(:data) { 'Coverage 1033 / 1051 LOC (98.29%) covered\n' }
let(:regex) { '\(\d+.\d+\%\) covered' }
before do
stub_const('Gitlab::Ci::Trace::Stream::BUFFER_SIZE', data.length)
end
it { is_expected.to eq("98.29") }
end
context 'using a regex capture' do
let(:data) { 'TOTAL 9926 3489 65%' }
let(:regex) { 'TOTAL\s+\d+\s+\d+\s+(\d{1,3}\%)' }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment