1
0
Fork 0
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:
akr 2007-08-18 12:33:43 +00:00
parent f80d24ee6f
commit 46cd1e338b
3 changed files with 72 additions and 0 deletions

View file

@ -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> Sat Aug 18 17:44:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ext/tk/tcltklib.c (Init_tcltklib): use rb_set_end_proc(). * ext/tk/tcltklib.c (Init_tcltklib): use rb_set_end_proc().

5
NEWS
View file

@ -26,6 +26,11 @@ with all sufficient information, see the ChangeLog file.
* Remove redundant module namespace in Cipher, Digest, PKCS7, PKCS12. * Remove redundant module namespace in Cipher, Digest, PKCS7, PKCS12.
Compatibility classes are provided which will be removed in Ruby 1.9. Compatibility classes are provided which will be removed in Ruby 1.9.
* tmpdir
* New method:
Dir.mktmpdir
== Changes with Ruby 1.8.5 == Changes with Ruby 1.8.5

View file

@ -4,6 +4,8 @@
# $Id$ # $Id$
# #
require 'fileutils'
class Dir class Dir
@@systmpdir = '/tmp' @@systmpdir = '/tmp'
@ -42,4 +44,64 @@ class Dir
end end
File.expand_path(tmp) File.expand_path(tmp)
end 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 end