diff --git a/lib/fileutils.rb b/lib/fileutils.rb index bc4fd70bf2..3c23ffc0e6 100644 --- a/lib/fileutils.rb +++ b/lib/fileutils.rb @@ -1608,13 +1608,13 @@ module FileUtils end private_module_function :fu_same? - @fileutils_output = $stderr - @fileutils_label = '' - def fu_output_message(msg) #:nodoc: - @fileutils_output ||= $stderr - @fileutils_label ||= '' - @fileutils_output.puts @fileutils_label + msg + output = @fileutils_output if defined?(@fileutils_output) + output ||= $stderr + if defined?(@fileutils_label) + msg = @fileutils_label + msg + end + output.puts msg end private_module_function :fu_output_message @@ -1695,8 +1695,6 @@ module FileUtils # module Verbose include FileUtils - @fileutils_output = $stderr - @fileutils_label = '' names = ::FileUtils.collect_method(:verbose) names.each do |name| module_eval(<<-EOS, __FILE__, __LINE__ + 1) @@ -1720,8 +1718,6 @@ module FileUtils module NoWrite include FileUtils include LowMethods - @fileutils_output = $stderr - @fileutils_label = '' names = ::FileUtils.collect_method(:noop) names.each do |name| module_eval(<<-EOS, __FILE__, __LINE__ + 1) @@ -1746,8 +1742,6 @@ module FileUtils module DryRun include FileUtils include LowMethods - @fileutils_output = $stderr - @fileutils_label = '' names = ::FileUtils.collect_method(:noop) names.each do |name| module_eval(<<-EOS, __FILE__, __LINE__ + 1) diff --git a/test/fileutils/test_fileutils.rb b/test/fileutils/test_fileutils.rb index 4480c2745b..41100e12a9 100644 --- a/test/fileutils/test_fileutils.rb +++ b/test/fileutils/test_fileutils.rb @@ -6,6 +6,7 @@ require 'etc' require_relative 'fileasserts' require 'pathname' require 'tmpdir' +require 'stringio' require 'test/unit' class TestFileUtils < Test::Unit::TestCase @@ -1673,6 +1674,29 @@ class TestFileUtils < Test::Unit::TestCase check_singleton :chdir end + def test_chdir_verbose + assert_output_lines(["cd .", "cd -"], FileUtils) do + FileUtils.chdir('.', verbose: true){} + end + end + + def test_chdir_verbose_frozen + o = Object.new + o.extend(FileUtils) + o.singleton_class.send(:public, :chdir) + o.freeze + orig_stderr = $stderr + $stderr = StringIO.new + o.chdir('.', verbose: true){} + $stderr.rewind + assert_equal(<<-END, $stderr.read) +cd . +cd - + END + ensure + $stderr = orig_stderr if orig_stderr + end + def test_getwd check_singleton :getwd end