aboutsummaryrefslogtreecommitdiffstats
path: root/lib/un.rb
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-06-02 09:51:30 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-06-02 09:51:30 +0000
commiteaa3ffbae8f20ddae208747db5310b113ffbbf71 (patch)
tree22273c9208b146b3e45a9afc3d493d7fb69ce5ea /lib/un.rb
parentc14780690131bf598c0a20dba58791f8d1c93881 (diff)
downloadruby-eaa3ffbae8f20ddae208747db5310b113ffbbf71.tar.gz
* lib/un.rb (wait_writable): wait until target files can be
written actually. * win32/Makefile.sub (LDSHARED_0, LINK_SO): get rid of failure of mt.exe. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16754 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/un.rb')
-rw-r--r--lib/un.rb27
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/un.rb b/lib/un.rb
index 9bf6c13146..4512c83181 100644
--- a/lib/un.rb
+++ b/lib/un.rb
@@ -214,6 +214,33 @@ def touch
end
##
+# Wait until the file becomes writable.
+#
+# ruby -run -e wait_writable -- [OPTION] FILE
+#
+
+def wait_writable
+ setup("n:w:v") do |argv, options|
+ verbose = options[:verbose]
+ n = options[:n] and n = Integer(n)
+ wait = (wait = options[:w]) ? Float(wait) : 0.2
+ argv.each do |file|
+ begin
+ open(file, "r+b")
+ rescue Errno::ENOENT
+ break
+ rescue Errno::EACCES => e
+ raise if n and (n -= 1) <= 0
+ puts e
+ STDOUT.flush
+ sleep wait
+ retry
+ end
+ end
+ end
+end
+
+##
# Display help message.
#
# ruby -run -e help [COMMAND]