diff options
author | eban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-07-29 10:24:28 +0000 |
---|---|---|
committer | eban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-07-29 10:24:28 +0000 |
commit | 3fbbec0c39f5a166e3bd5016c6dfaf30c26bb498 (patch) | |
tree | d94e9e48b07fcc6c82e908093d9c515e9cb9bf01 /lib/un.rb | |
parent | 23301726b08691c0f2706ad9d340da62a0902cc6 (diff) | |
download | ruby-3fbbec0c39f5a166e3bd5016c6dfaf30c26bb498.tar.gz |
* lib/fileutils.rb (install): support preserve timestamp.
* instruby.rb (install): use FileUtils::install preserve mode.
* lib/un.rb: new. % ruby -run -e cp -- -p foo bar
* lib/mkmf.rb: use un.rb instead of ftools.rb.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4210 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/un.rb')
-rw-r--r-- | lib/un.rb | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/lib/un.rb b/lib/un.rb new file mode 100644 index 0000000000..3834784f2d --- /dev/null +++ b/lib/un.rb @@ -0,0 +1,101 @@ +require 'fileutils' +require 'getopts' + +module FileUtils +# @fileutils_label = '' + @fileutils_output = $stdout +end + +def setup(options = "") + options += "v" + ARGV.map! do |x| + case x + when /^-/ + x.delete "^-#{options}" + when /[*?\[{]/ + Dir[x] + else + x + end + end + ARGV.flatten! + ARGV.delete_if{|x| x == '-'} + getopts(options) + options = {} + options[:verbose] = true if $OPT["v"] + options[:force] = true if $OPT["f"] + options[:preserve] = true if $OPT["p"] + yield ARGV, options, $OPT +end + +def mkdir + setup("p") do |argv, options, opt| + cmd = "mkdir" + cmd += "_p" if options.delete :preserve + FileUtils.send cmd, argv, options + end +end + +def rmdir + setup do |argv, options| + FileUtils.rmdir argv, options + end +end + +def ln + setup("sf") do |argv, options, opt| + cmd = "ln" + cmd += "_s" if opt["s"] + dest = argv.pop + argv = argv[0] if argv.size == 1 + FileUtils.send cmd, argv, dest, options + end +end + +def cp + setup("pr") do |argv, options, opt| + cmd = "cp" + cmd += "_r" if opt["r"] + dest = argv.pop + argv = argv[0] if argv.size == 1 + FileUtils.send cmd, argv, dest, options + end +end + +def mv + setup do |argv, options| + dest = argv.pop + argv = argv[0] if argv.size == 1 + FileUtils.mv argv, dest, options + end +end + +def rm + setup("fr") do |argv, options, opt| + cmd = "rm" + cmd += "_r" if opt["r"] + FileUtils.send cmd, argv, options + end +end + +def install + setup("pm:") do |argv, options, opt| + options[:mode] = opt["m"] ? opt["m"].oct : 0755 + dest = argv.pop + argv = argv[0] if argv.size == 1 + FileUtils.install argv, dest, options + end +end + +def chmod + setup do |argv, options| + mode = argv.shift.oct + FileUtils.chmod mode, argv, options + end +end + +def touch + setup do |argv, options| + FileUtils.touch argv, options + end +end |