aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Library/Homebrew/extend/pathname.rb13
1 files changed, 7 insertions, 6 deletions
diff --git a/Library/Homebrew/extend/pathname.rb b/Library/Homebrew/extend/pathname.rb
index ca1d167c1..e65dc25ef 100644
--- a/Library/Homebrew/extend/pathname.rb
+++ b/Library/Homebrew/extend/pathname.rb
@@ -105,10 +105,9 @@ class Pathname
# NOTE always overwrites
def atomic_write content
require "tempfile"
- tf = Tempfile.new(basename.to_s)
+ tf = Tempfile.new(basename.to_s, dirname)
tf.binmode
tf.write(content)
- tf.close
begin
old_stat = stat
@@ -116,16 +115,18 @@ class Pathname
old_stat = default_stat
end
- FileUtils.mv tf.path, self
-
uid = Process.uid
gid = Process.groups.delete(old_stat.gid) { Process.gid }
begin
- chown(uid, gid)
- chmod(old_stat.mode)
+ tf.chown(uid, gid)
+ tf.chmod(old_stat.mode)
rescue Errno::EPERM
end
+
+ File.rename(tf.path, self)
+ ensure
+ tf.close!
end
def default_stat