From c26b126502d4025230aa80e7d26736e1398c5022 Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Mon, 17 Apr 2017 15:53:09 +0800 Subject: Make sure @stream.each_line would tag Encoding.default_external --- lib/gitlab/ci/trace/stream.rb | 2 ++ spec/lib/gitlab/ci/trace/stream_spec.rb | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/gitlab/ci/trace/stream.rb b/lib/gitlab/ci/trace/stream.rb index 33141d0d88d..8d9fb6ff0f1 100644 --- a/lib/gitlab/ci/trace/stream.rb +++ b/lib/gitlab/ci/trace/stream.rb @@ -15,6 +15,8 @@ module Gitlab def initialize @stream = yield @stream.binmode + # Ci::Ansi2html::Converter would read from @stream directly + @stream.set_encoding(Encoding.default_external) end def valid? diff --git a/spec/lib/gitlab/ci/trace/stream_spec.rb b/spec/lib/gitlab/ci/trace/stream_spec.rb index 4bbca6d2ea2..6f5c9994f54 100644 --- a/spec/lib/gitlab/ci/trace/stream_spec.rb +++ b/spec/lib/gitlab/ci/trace/stream_spec.rb @@ -34,12 +34,12 @@ describe Gitlab::Ci::Trace::Stream do end context 'when the trace contains ANSI sequence and Unicode' do - let(:stream) do - described_class.new do - File.open(expand_fixture_path('trace/ansi-sequence-and-unicode')) - end + let(:io) do + File.open(expand_fixture_path('trace/ansi-sequence-and-unicode')) end + let(:stream) { described_class.new { io } } + it 'forwards to the next linefeed, case 1' do stream.limit(7) @@ -57,6 +57,16 @@ describe Gitlab::Ci::Trace::Stream do 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(29) + + result = io.read # Ci::Ansi2html::Converter would read with each_line + + expect(result).to eq("\e[01;32m許功蓋\e[0m\n") + expect(result.encoding).to eq(Encoding.default_external) + end end end -- cgit v1.2.1