From 09e91be9abbaa7e363d15ba6654afc9e667af4aa Mon Sep 17 00:00:00 2001 From: glass Date: Sat, 20 Sep 2014 17:35:06 +0000 Subject: * lib/tempfile.rb: define parameters appropriately and some refactoring. * lib/tmpdir.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47655 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/tempfile.rb | 36 ++++++++++-------------------------- lib/tmpdir.rb | 22 +++++++--------------- 2 files changed, 17 insertions(+), 41 deletions(-) (limited to 'lib') diff --git a/lib/tempfile.rb b/lib/tempfile.rb index f0231bfc1b..0d3c2a3901 100644 --- a/lib/tempfile.rb +++ b/lib/tempfile.rb @@ -78,8 +78,6 @@ require 'tmpdir' # same Tempfile object from multiple threads then you should protect it with a # mutex. class Tempfile < DelegateClass(File) - include Dir::Tmpname - # call-seq: # new(basename, [tmpdir = Dir.tmpdir], [options]) # @@ -124,7 +122,7 @@ class Tempfile < DelegateClass(File) # # If Tempfile.new cannot find a unique filename within a limited # number of tries, then it will raise an exception. - def initialize(basename, *rest) + def initialize(basename, tmpdir=nil, mode: 0, **opts) if block_given? warn "Tempfile.new doesn't call the given block." end @@ -132,20 +130,13 @@ class Tempfile < DelegateClass(File) @clean_proc = Remover.new(@data) ObjectSpace.define_finalizer(self, @clean_proc) - ::Dir::Tmpname.create(basename, *rest) do |tmpname, n, opts| - mode = File::RDWR|File::CREAT|File::EXCL - perm = 0600 - if opts - mode |= opts.delete(:mode) || 0 - opts[:perm] = perm - perm = nil - else - opts = perm - end + ::Dir::Tmpname.create(basename, tmpdir, opts) do |tmpname, n, opts| + mode |= File::RDWR|File::CREAT|File::EXCL + opts[:perm] = 0600 @data[1] = @tmpfile = File.open(tmpname, mode, opts) @data[0] = @tmpname = tmpname @mode = mode & ~(File::CREAT|File::EXCL) - perm or opts.freeze + opts.freeze @opts = opts end @@ -278,7 +269,7 @@ class Tempfile < DelegateClass(File) def call(*args) return if @pid != $$ - path, tmpfile = *@data + path, tmpfile = @data STDERR.print "removing ", path, "..." if $DEBUG @@ -356,18 +347,11 @@ end # ... do something with f ... # end # -def Tempfile.create(basename, *rest) +def Tempfile.create(basename, tmpdir=nil, mode: 0, **opts) tmpfile = nil - Dir::Tmpname.create(basename, *rest) do |tmpname, n, opts| - mode = File::RDWR|File::CREAT|File::EXCL - perm = 0600 - if opts - mode |= opts.delete(:mode) || 0 - opts[:perm] = perm - perm = nil - else - opts = perm - end + Dir::Tmpname.create(basename, tmpdir, opts) do |tmpname, n, opts| + mode |= File::RDWR|File::CREAT|File::EXCL + opts[:perm] = 0600 tmpfile = File.open(tmpname, mode, opts) end if block_given? diff --git a/lib/tmpdir.rb b/lib/tmpdir.rb index 409d779b8a..0b21f00d8e 100644 --- a/lib/tmpdir.rb +++ b/lib/tmpdir.rb @@ -17,12 +17,12 @@ class Dir ## # Returns the operating system's temporary file path. - def Dir::tmpdir + def self.tmpdir if $SAFE > 0 @@systmpdir else tmp = nil - for dir in [ENV['TMPDIR'], ENV['TMP'], ENV['TEMP'], @@systmpdir, '/tmp', '.'] + [ENV['TMPDIR'], ENV['TMP'], ENV['TEMP'], @@systmpdir, '/tmp', '.'].each do |dir| next if !dir dir = File.expand_path(dir) if stat = File.stat(dir) and stat.directory? and stat.writable? and @@ -31,7 +31,7 @@ class Dir break end rescue nil end - raise ArgumentError, "could not find a temporary directory" if !tmp + raise ArgumentError, "could not find a temporary directory" unless tmp tmp end end @@ -81,8 +81,8 @@ class Dir # FileUtils.remove_entry dir # end # - def Dir.mktmpdir(prefix_suffix=nil, *rest) - path = Tmpname.create(prefix_suffix || "d", *rest) {|n| mkdir(n, 0700)} + def Dir.mktmpdir(prefix_suffix="d", *rest) + path = Tmpname.create(prefix_suffix, *rest) {|n| mkdir(n, 0700)} if block_given? begin yield path @@ -122,15 +122,7 @@ class Dir path << suffix end - def create(basename, *rest) - if opts = Hash.try_convert(rest[-1]) - opts = opts.dup if rest.pop.equal?(opts) - max_try = opts.delete(:max_try) - opts = [opts] - else - opts = [] - end - tmpdir, = *rest + def create(basename, tmpdir=nil, max_try: nil, **opts) if $SAFE > 0 and tmpdir.tainted? tmpdir = '/tmp' else @@ -139,7 +131,7 @@ class Dir n = nil begin path = File.join(tmpdir, make_tmpname(basename, n)) - yield(path, n, *opts) + yield(path, n, opts) rescue Errno::EEXIST n ||= 0 n += 1 -- cgit v1.2.3