Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c19c11a

Browse files
authored
Merge pull request #37 from jeremyevans/fix-frozen
Do not break in verbose mode if using FileUtils with a frozen object
2 parents a5eca84 + 689cb9c commit c19c11a

File tree

2 files changed

+30
-12
lines changed

2 files changed

+30
-12
lines changed

lib/fileutils.rb

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1608,13 +1608,13 @@ def fu_same?(a, b) #:nodoc:
16081608
end
16091609
private_module_function :fu_same?
16101610

1611-
@fileutils_output = $stderr
1612-
@fileutils_label = ''
1613-
16141611
def fu_output_message(msg) #:nodoc:
1615-
@fileutils_output ||= $stderr
1616-
@fileutils_label ||= ''
1617-
@fileutils_output.puts @fileutils_label + msg
1612+
output = @fileutils_output if defined?(@fileutils_output)
1613+
output ||= $stderr
1614+
if defined?(@fileutils_label)
1615+
msg = @fileutils_label + msg
1616+
end
1617+
output.puts msg
16181618
end
16191619
private_module_function :fu_output_message
16201620

@@ -1695,8 +1695,6 @@ def _do_nothing(*)end
16951695
#
16961696
module Verbose
16971697
include FileUtils
1698-
@fileutils_output = $stderr
1699-
@fileutils_label = ''
17001698
names = ::FileUtils.collect_method(:verbose)
17011699
names.each do |name|
17021700
module_eval(<<-EOS, __FILE__, __LINE__ + 1)
@@ -1720,8 +1718,6 @@ class << self
17201718
module NoWrite
17211719
include FileUtils
17221720
include LowMethods
1723-
@fileutils_output = $stderr
1724-
@fileutils_label = ''
17251721
names = ::FileUtils.collect_method(:noop)
17261722
names.each do |name|
17271723
module_eval(<<-EOS, __FILE__, __LINE__ + 1)
@@ -1746,8 +1742,6 @@ class << self
17461742
module DryRun
17471743
include FileUtils
17481744
include LowMethods
1749-
@fileutils_output = $stderr
1750-
@fileutils_label = ''
17511745
names = ::FileUtils.collect_method(:noop)
17521746
names.each do |name|
17531747
module_eval(<<-EOS, __FILE__, __LINE__ + 1)

test/fileutils/test_fileutils.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
require_relative 'fileasserts'
77
require 'pathname'
88
require 'tmpdir'
9+
require 'stringio'
910
require 'test/unit'
1011

1112
class TestFileUtils < Test::Unit::TestCase
@@ -1673,6 +1674,29 @@ def test_chdir
16731674
check_singleton :chdir
16741675
end
16751676

1677+
def test_chdir_verbose
1678+
assert_output_lines(["cd .", "cd -"], FileUtils) do
1679+
FileUtils.chdir('.', verbose: true){}
1680+
end
1681+
end
1682+
1683+
def test_chdir_verbose_frozen
1684+
o = Object.new
1685+
o.extend(FileUtils)
1686+
o.singleton_class.send(:public, :chdir)
1687+
o.freeze
1688+
orig_stderr = $stderr
1689+
$stderr = StringIO.new
1690+
o.chdir('.', verbose: true){}
1691+
$stderr.rewind
1692+
assert_equal(<<-END, $stderr.read)
1693+
cd .
1694+
cd -
1695+
END
1696+
ensure
1697+
$stderr = orig_stderr if orig_stderr
1698+
end
1699+
16761700
def test_getwd
16771701
check_singleton :getwd
16781702
end

0 commit comments

Comments
 (0)