mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/tmpdir.rb (Dir.mktmpdir): new method.
[ruby-dev:31462] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@13107 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
f80d24ee6f
commit
46cd1e338b
3 changed files with 72 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
Sat Aug 18 21:32:20 2007 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* lib/tmpdir.rb (Dir.mktmpdir): new method.
|
||||
[ruby-dev:31462]
|
||||
|
||||
Sat Aug 18 17:44:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* ext/tk/tcltklib.c (Init_tcltklib): use rb_set_end_proc().
|
||||
|
|
5
NEWS
5
NEWS
|
@ -26,6 +26,11 @@ with all sufficient information, see the ChangeLog file.
|
|||
|
||||
* Remove redundant module namespace in Cipher, Digest, PKCS7, PKCS12.
|
||||
Compatibility classes are provided which will be removed in Ruby 1.9.
|
||||
|
||||
* tmpdir
|
||||
|
||||
* New method:
|
||||
Dir.mktmpdir
|
||||
|
||||
== Changes with Ruby 1.8.5
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
# $Id$
|
||||
#
|
||||
|
||||
require 'fileutils'
|
||||
|
||||
class Dir
|
||||
|
||||
@@systmpdir = '/tmp'
|
||||
|
@ -42,4 +44,64 @@ class Dir
|
|||
end
|
||||
File.expand_path(tmp)
|
||||
end
|
||||
|
||||
# Dir.mktmpdir creates a temporary directory.
|
||||
#
|
||||
# The directory is created with 0700 permission.
|
||||
# The name of the directory is prefixed
|
||||
# with <i>prefix</i> argument.
|
||||
# If <i>prefix</i> is not given,
|
||||
# the prefix "d" is used.
|
||||
#
|
||||
# The directory is created under Dir.tmpdir or
|
||||
# the optional second argument <i>tmpdir</i> if non-nil value is given.
|
||||
#
|
||||
# If a block is given,
|
||||
# it is yielded with the path of the directory.
|
||||
# The directory and its contents are removed
|
||||
# using FileUtils.remove_entry_secure before Dir.mktmpdir returns.
|
||||
# The value of the block is returned.
|
||||
#
|
||||
# Dir.mktmpdir {|dir|
|
||||
# # use the directory...
|
||||
# open("#{dir}/foo", "w") { ... }
|
||||
# }
|
||||
#
|
||||
# If a block is not given,
|
||||
# The path of the directory is returned.
|
||||
# In this case, Dir.mktmpdir doesn't remove the directory.
|
||||
#
|
||||
# dir = Dir.mktmpdir
|
||||
# begin
|
||||
# # use the directory...
|
||||
# open("#{dir}/foo", "w") { ... }
|
||||
# ensure
|
||||
# # remove the directory.
|
||||
# FileUtils.remove_entry_secure dir
|
||||
# end
|
||||
#
|
||||
def Dir.mktmpdir(prefix="d", tmpdir=nil)
|
||||
tmpdir ||= Dir.tmpdir
|
||||
t = Time.now.strftime("%Y%m%d")
|
||||
n = nil
|
||||
begin
|
||||
path = "#{tmpdir}/#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
|
||||
path << "-#{n}" if n
|
||||
Dir.mkdir(path, 0700)
|
||||
rescue Errno::EEXIST
|
||||
n ||= 0
|
||||
n += 1
|
||||
retry
|
||||
end
|
||||
|
||||
if block_given?
|
||||
begin
|
||||
yield path
|
||||
ensure
|
||||
FileUtils.remove_entry_secure path
|
||||
end
|
||||
else
|
||||
path
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue