Skip to content
Snippets Groups Projects
Commit 68bf7edf authored by Kamil Trzcińśki's avatar Kamil Trzcińśki Committed by Lin Jen-Shin
Browse files

Merge branch 'enforce-Ansi2html-output-encoding' into 'master'

Just enforce the output encoding for Ansi2html

See merge request !10758
parent 00b993ae
No related branches found
No related tags found
No related merge requests found
Pipeline #
---
title: Fix trace cannot be written due to encoding
merge_request: 10758
author:
Loading
Loading
@@ -172,7 +172,7 @@ module Ci
close_open_tags()
 
OpenStruct.new(
html: @out,
html: @out.force_encoding(Encoding.default_external),
state: state,
append: append,
truncated: truncated,
Loading
Loading
Loading
Loading
@@ -14,14 +14,7 @@ module Gitlab
 
def initialize
@stream = yield
if @stream
@stream.binmode
# Ci::Ansi2html::Converter would read from @stream directly,
# using @stream.each_line to be specific. It's safe to set
# the encoding here because IO#seek(bytes) and IO#read(bytes)
# are not characters based, so encoding doesn't matter to them.
@stream.set_encoding(Encoding.default_external)
end
@stream&.binmode
end
 
def valid?
Loading
Loading
@@ -68,8 +61,8 @@ module Gitlab
 
def html(last_lines: nil)
text = raw(last_lines: last_lines)
stream = StringIO.new(text)
::Ci::Ansi2html.convert(stream).html
buffer = StringIO.new(text)
::Ci::Ansi2html.convert(buffer).html
end
 
def extract_coverage(regex)
Loading
Loading
Loading
Loading
@@ -71,12 +71,20 @@ describe Gitlab::Ci::Trace::Stream do
end
 
describe '#append' do
let(:tempfile) { Tempfile.new }
let(:stream) do
described_class.new do
StringIO.new("12345678")
tempfile.write("12345678")
tempfile.rewind
tempfile
end
end
 
after do
tempfile.unlink
end
it "truncates and append content" do
stream.append("89", 4)
stream.seek(0)
Loading
Loading
@@ -84,6 +92,17 @@ describe Gitlab::Ci::Trace::Stream do
expect(stream.size).to eq(6)
expect(stream.raw).to eq("123489")
end
it 'appends in binary mode' do
'😺'.force_encoding('ASCII-8BIT').each_char.with_index do |byte, offset|
stream.append(byte, offset)
end
stream.seek(0)
expect(stream.size).to eq(4)
expect(stream.raw).to eq('😺')
end
end
 
describe '#set' do
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment