diff options
-rw-r--r-- | lib/fileutils.rb | 9 | ||||
-rw-r--r-- | test/fileutils/test_fileutils.rb | 2 |
2 files changed, 5 insertions, 6 deletions
diff --git a/lib/fileutils.rb b/lib/fileutils.rb index 56b0c1a555..fea954e22c 100644 --- a/lib/fileutils.rb +++ b/lib/fileutils.rb @@ -917,11 +917,8 @@ module FileUtils private_module_function :apply_mask def symbolic_modes_to_i(mode_sym, path) #:nodoc: - mode = if File::Stat === path - path.mode - else - File.stat(path).mode - end + path = File.stat(path) unless File::Stat === path + mode = path.mode mode_sym.split(/,/).inject(mode & 07777) do |current_mode, clause| target, *actions = clause.split(/([=+-])/) raise ArgumentError, "invalid file mode: #{mode_sym}" if actions.empty? @@ -938,7 +935,7 @@ module FileUtils when "x" mask | 0111 when "X" - if FileTest.directory? path + if path.directory? mask | 0111 else mask diff --git a/test/fileutils/test_fileutils.rb b/test/fileutils/test_fileutils.rb index e9a21beeba..d785de406a 100644 --- a/test/fileutils/test_fileutils.rb +++ b/test/fileutils/test_fileutils.rb @@ -1193,6 +1193,8 @@ class TestFileUtils < Test::Unit::TestCase assert_filemode 04500, 'tmp/j' install 'tmp/j', 'tmp/k', :mode => "+s" assert_filemode 06500, 'tmp/k' + install 'tmp/a', 'tmp/l', :mode => "o+X" + assert_equal_filemode 'tmp/a', 'tmp/l' end if have_file_perm? def test_chmod |