From ee3b0c3a9ad0823f86b5c798c47c343a812228d0 Mon Sep 17 00:00:00 2001
From: Lin Jen-Shin <godfat@godfat.org>
Date: Mon, 17 Apr 2017 14:30:42 +0800
Subject: [PATCH] Make sure we're giving Encoding.default_external

---
 lib/gitlab/ci/trace/stream.rb           |  4 ++--
 spec/lib/gitlab/ci/trace/stream_spec.rb | 12 +++++++++---
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/lib/gitlab/ci/trace/stream.rb b/lib/gitlab/ci/trace/stream.rb
index 3b335cdfd01..33141d0d88d 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 9e3bd6d662f..4bbca6d2ea2 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
-- 
GitLab