diff --git a/lib/gitlab/ci/trace/stream.rb b/lib/gitlab/ci/trace/stream.rb index 3b335cdfd01feb5947a4aa475a6b30f565dd8cdf..33141d0d88d0daae71231e7d2ed0aed50d67a617 100644 --- a/lib/gitlab/ci/trace/stream.rb +++ b/lib/gitlab/ci/trace/stream.rb @@ -14,6 +14,7 @@ module Gitlab def initialize @stream = yield + @stream.binmode end def valid? @@ -51,7 +52,7 @@ module Gitlab read_last_lines(last_lines) else stream.read - end + end.force_encoding(Encoding.default_external) end def html_with_state(state = nil) @@ -113,7 +114,6 @@ module Gitlab end chunks.join.lines.last(last_lines).join - .force_encoding(Encoding.default_external) end end end diff --git a/spec/lib/gitlab/ci/trace/stream_spec.rb b/spec/lib/gitlab/ci/trace/stream_spec.rb index 9e3bd6d662fdd9fcca3e702e1f156eadc6d77337..4bbca6d2ea23cf858b6c891b9b0c828d6f9b2c74 100644 --- a/spec/lib/gitlab/ci/trace/stream_spec.rb +++ b/spec/lib/gitlab/ci/trace/stream_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' describe Gitlab::Ci::Trace::Stream do describe 'delegates' do - subject { described_class.new { nil } } + subject { described_class.new { StringIO.new } } it { is_expected.to delegate_method(:close).to(:stream) } it { is_expected.to delegate_method(:tell).to(:stream) } @@ -43,13 +43,19 @@ describe Gitlab::Ci::Trace::Stream do it 'forwards to the next linefeed, case 1' do stream.limit(7) - expect(stream.raw).to eq('') + result = stream.raw + + expect(result).to eq('') + expect(result.encoding).to eq(Encoding.default_external) end it 'forwards to the next linefeed, case 2' do 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 end end