aboutsummaryrefslogtreecommitdiffstats
path: root/lib/un.rb
diff options
context:
space:
mode:
authoreban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-07-29 10:24:28 +0000
committereban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-07-29 10:24:28 +0000
commit3fbbec0c39f5a166e3bd5016c6dfaf30c26bb498 (patch)
treed94e9e48b07fcc6c82e908093d9c515e9cb9bf01 /lib/un.rb
parent23301726b08691c0f2706ad9d340da62a0902cc6 (diff)
downloadruby-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.rb101
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