diff options
author | Lin Jen-Shin <godfat@godfat.org> | 2018-01-23 20:12:51 +0800 |
---|---|---|
committer | Lin Jen-Shin <godfat@godfat.org> | 2018-01-26 19:42:48 +0800 |
commit | 54ca8d0d6c4744be53c7044b9bbfa05acc358090 (patch) | |
tree | b4258bc91245eca92b2ef5321f18e67ee524c61c /lib/gitlab/popen.rb | |
parent | a0d57ee2b35f0e232aff930a94dfbcabe2860158 (diff) | |
download | gitlab-ce-54ca8d0d6c4744be53c7044b9bbfa05acc358090.tar.gz |
Fail static-analysis if there's output to stderr
TODO: fix offenders
Diffstat (limited to 'lib/gitlab/popen.rb')
-rw-r--r-- | lib/gitlab/popen.rb | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/lib/gitlab/popen.rb b/lib/gitlab/popen.rb index 4bc5cda8cb5..05526a9ac94 100644 --- a/lib/gitlab/popen.rb +++ b/lib/gitlab/popen.rb @@ -5,7 +5,17 @@ module Gitlab module Popen extend self - def popen(cmd, path = nil, vars = {}) + Result = Struct.new(:cmd, :stdout, :stderr, :status, :duration) + + # Returns [stdout + stderr, status] + def popen(cmd, path = nil, vars = {}, &block) + result = popen_with_detail(cmd, path, vars, &block) + + [result.stdout << result.stderr, result.status] + end + + # Returns Result + def popen_with_detail(cmd, path = nil, vars = {}) unless cmd.is_a?(Array) raise "System commands must be given as an array of strings" end @@ -18,18 +28,21 @@ module Gitlab FileUtils.mkdir_p(path) end - cmd_output = "" + cmd_stdout = '' + cmd_stderr = '' cmd_status = 0 + start = Time.now + Open3.popen3(vars, *cmd, options) do |stdin, stdout, stderr, wait_thr| yield(stdin) if block_given? stdin.close - cmd_output << stdout.read - cmd_output << stderr.read + cmd_stdout = stdout.read + cmd_stderr = stderr.read cmd_status = wait_thr.value.exitstatus end - [cmd_output, cmd_status] + Result.new(cmd, cmd_stdout, cmd_stderr, cmd_status, Time.now - start) end end end |