Project

General

Profile

Feature #2190

FileUtils::chmod - allow symbolic mode

Added by sunaku (Suraj Kurapati) over 10 years ago. Updated about 9 years ago.

Status:
Closed
Priority:
Normal
Target version:
[ruby-core:26029]

Description

=begin
Hello,

I request that FileUtils::chmod() and FileUtils::chmod_R() accept
symbolic modes, which are strings like "u+x,g-w,o=" (see "symbolic
mode" in man chmod for details), in addition to the numeric modes
they currently accept.

If my request is fulfilled, the following would be equivalent:

FileUtils::chmod(0712, "file.txt")

FileUtils::chmod("u=rwx,g=x,o=w", "file.txt")

In addition, symbolic modes would allow delta/patch changes:

FileUtils::chmod("g+w", "file.txt")

This is not so easy with numeric modes, because you must
first read the current mode, apply your delta/patch mode
using a bitwise OR operation, and finally apply the new
numeric mode using FileUtils::chmod().

Thanks for your consideration.
=end


Files

#1

Updated by znz (Kazuhiro NISHIYAMA) over 10 years ago

  • Category set to lib
  • Target version set to 2.0.0

=begin

=end

#2

Updated by takkanm (三村 益隆) about 10 years ago

=begin
Hi. I'm takkanm.

FileUtils:: chmod () that I wrote a patch to use the symbolic mode.
How about this?
=end

#3

Updated by sunaku (Suraj Kurapati) about 10 years ago

=begin
Thanks for your patch, takkanm! I hope the Ruby developers will
accept it into Ruby trunk. I have one small suggestion for you:

def fu_mode(mode, path)
  • mode.class == String ? symbolic_modes_to_i(mode, path) : mode
  • mode.is_a?(String) ? symbolic_modes_to_i(mode, path) : mode end

Greetings.
=end

#4

Updated by dolzenko (Evgeniy Dolzhenko) over 9 years ago

=begin
+1 Would like to see this it's way to the core, except that current_file_mode function doesn't seem to be really used anyway and can be removed:

  • def symbolic_modes_to_i(modes, path)
  • current_mode = current_file_mode(path)
  • current_mode = (File.stat(path).mode & 07777) ... =end

Updated by anthezium (ted cooper) about 9 years ago

=begin
+1
we have a million chmod ... expressions lurking because of this omission. please accept this into trunk!
=end

Updated by kosaki (Motohiro KOSAKI) about 9 years ago

  • Status changed from Open to Assigned
  • Assignee set to kosaki (Motohiro KOSAKI)

=begin
Hi

This request seems very reasonable to me. I'll review the patch later.
=end

Updated by kosaki (Motohiro KOSAKI) about 9 years ago

  • Status changed from Assigned to Closed

r31407

Updated by kosaki (Motohiro KOSAKI) about 9 years ago

I slightly change the testcase at r31415. because FreeBSD don't change sticky bit.

Thx.

Also available in: Atom PDF