From 479ad0265b4998531be1682d9ac96f8dec10a553 Mon Sep 17 00:00:00 2001 From: Jack Nagel Date: Fri, 5 Sep 2014 15:13:52 -0500 Subject: [PATCH] Reduce effective scope of pipe variables --- Library/Homebrew/formula.rb | 62 +++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 6965a452e0..da7f081b9a 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -493,8 +493,6 @@ class Formula # Pretty titles the command and buffers stdout/stderr # Throws if there's an error def system cmd, *args - rd, wr = IO.pipe - # remove "boring" arguments so that the important ones are more likely to # be shown considering that we trim long ohai lines to the terminal width pretty_args = args.dup @@ -510,39 +508,43 @@ class Formula logfn = "#{logd}/%02d.%s" % [@exec_count, File.basename(cmd).split(' ').first] mkdir_p(logd) - pid = fork { exec_cmd(cmd, args, rd, wr, logfn) } - wr.close + rd, wr = IO.pipe - File.open(logfn, 'w') do |f| - f.puts Time.now, "", cmd, args, "" + begin + pid = fork { exec_cmd(cmd, args, rd, wr, logfn) } + wr.close - if ARGV.verbose? - while buf = rd.gets - f.puts buf - puts buf + File.open(logfn, 'w') do |f| + f.puts Time.now, "", cmd, args, "" + + if ARGV.verbose? + while buf = rd.gets + f.puts buf + puts buf + end + elsif IO.respond_to?(:copy_stream) + IO.copy_stream(rd, f) + else + buf = "" + f.write(buf) while rd.read(1024, buf) + end + + Process.wait(pid) + + $stdout.flush + + unless $?.success? + f.flush + Kernel.system "/usr/bin/tail", "-n", "5", logfn unless ARGV.verbose? + f.puts + require 'cmd/config' + Homebrew.dump_build_config(f) + raise BuildError.new(self, cmd, args) end - elsif IO.respond_to?(:copy_stream) - IO.copy_stream(rd, f) - else - buf = "" - f.write(buf) while rd.read(1024, buf) - end - - Process.wait(pid) - - $stdout.flush - - unless $?.success? - f.flush - Kernel.system "/usr/bin/tail", "-n", "5", logfn unless ARGV.verbose? - f.puts - require 'cmd/config' - Homebrew.dump_build_config(f) - raise BuildError.new(self, cmd, args) end + ensure + rd.close unless rd.closed? end - ensure - rd.close unless rd.closed? end private