Use FileUtils.mv instead of rename to copy in case of cross-device links

This commit is contained in:
Jeremy Kemper 2010-02-18 10:47:45 -08:00
parent a5684dfa3c
commit cc852e2580
1 changed files with 2 additions and 1 deletions

View File

@ -14,6 +14,7 @@ class File
# end # end
def self.atomic_write(file_name, temp_dir = Dir.tmpdir) def self.atomic_write(file_name, temp_dir = Dir.tmpdir)
require 'tempfile' unless defined?(Tempfile) require 'tempfile' unless defined?(Tempfile)
require 'fileutils' unless defined?(FileUtils)
temp_file = Tempfile.new(basename(file_name), temp_dir) temp_file = Tempfile.new(basename(file_name), temp_dir)
yield temp_file yield temp_file
@ -31,7 +32,7 @@ class File
end end
# Overwrite original file with temp file # Overwrite original file with temp file
rename(temp_file.path, file_name) FileUtils.mv(temp_file.path, file_name)
# Set correct permissions on new file # Set correct permissions on new file
chown(old_stat.uid, old_stat.gid, file_name) chown(old_stat.uid, old_stat.gid, file_name)