summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/fileutils.rb9
-rw-r--r--test/fileutils/test_fileutils.rb2
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