diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-15 15:38:18 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-15 15:38:18 +0000 |
commit | bba925eae6f49931a46fd879425c1b0927e95aab (patch) | |
tree | 2274c61167e1b4c7d7d1c67d7934a5808d630cd6 /lib/tmpdir.rb | |
parent | f13e9b734cbdec6f93796aa68feb95f0b123a040 (diff) | |
download | ruby-bba925eae6f49931a46fd879425c1b0927e95aab.tar.gz |
* lib/tmpdir.rb (Dir.mktmpdir): new method. [ruby-dev:31416]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12944 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/tmpdir.rb')
-rw-r--r-- | lib/tmpdir.rb | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/tmpdir.rb b/lib/tmpdir.rb index 434d1bf053..ada9ed5544 100644 --- a/lib/tmpdir.rb +++ b/lib/tmpdir.rb @@ -4,6 +4,8 @@ # $Id$ # +require 'fileutils' + class Dir @@systmpdir = '/tmp' @@ -42,4 +44,63 @@ 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 given. + # + # If a block is given, + # it is yielded with the path of the directory. + # The directory is removed 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 |