Commit 4973f018 authored by Sean McGivern's avatar Sean McGivern Committed by Lin Jen-Shin

Merge branch 'fix-trace-encoding' into 'master'

Explicitly give Encoding.default_external for trace

Closes #30796

See merge request !10728
parent 337080de
---
title: Fix another case where trace does not have proper encoding set
merge_request: 10728
author:
...@@ -14,6 +14,14 @@ module Gitlab ...@@ -14,6 +14,14 @@ module Gitlab
def initialize def initialize
@stream = yield @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
end end
def valid? def valid?
...@@ -51,7 +59,7 @@ module Gitlab ...@@ -51,7 +59,7 @@ module Gitlab
read_last_lines(last_lines) read_last_lines(last_lines)
else else
stream.read stream.read
end end.force_encoding(Encoding.default_external)
end end
def html_with_state(state = nil) def html_with_state(state = nil)
...@@ -113,7 +121,6 @@ module Gitlab ...@@ -113,7 +121,6 @@ module Gitlab
end end
chunks.join.lines.last(last_lines).join chunks.join.lines.last(last_lines).join
.force_encoding(Encoding.default_external)
end end
end end
end end
......
...@@ -43,13 +43,29 @@ describe Gitlab::Ci::Trace::Stream do ...@@ -43,13 +43,29 @@ describe Gitlab::Ci::Trace::Stream do
it 'forwards to the next linefeed, case 1' do it 'forwards to the next linefeed, case 1' do
stream.limit(7) stream.limit(7)
expect(stream.raw).to eq('') result = stream.raw
expect(result).to eq('')
expect(result.encoding).to eq(Encoding.default_external)
end end
it 'forwards to the next linefeed, case 2' do it 'forwards to the next linefeed, case 2' do
stream.limit(29) stream.limit(29)
expect(stream.raw).to eq("\e[01;32m許功蓋\e[0m\n") result = stream.raw
expect(result).to eq("\e[01;32m許功蓋\e[0m\n")
expect(result.encoding).to eq(Encoding.default_external)
end
# See https://gitlab.com/gitlab-org/gitlab-ce/issues/30796
it 'reads in binary, output as Encoding.default_external' do
stream.limit(52)
result = stream.html
expect(result).to eq("ヾ(´༎ຶД༎ຶ`)ノ<br><span class=\"term-fg-green\">許功蓋</span><br>")
expect(result.encoding).to eq(Encoding.default_external)
end end
end end
end end
......
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