From ad7911bb7518574b8faac9d418ab7d5fdcf55c11 Mon Sep 17 00:00:00 2001 From: Jack Nagel Date: Thu, 27 Mar 2014 14:17:13 -0500 Subject: [PATCH] Replace files atomically when relocating, take two --- Library/Homebrew/keg_fix_install_names.rb | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/Library/Homebrew/keg_fix_install_names.rb b/Library/Homebrew/keg_fix_install_names.rb index d36eb25436..777a5ed003 100644 --- a/Library/Homebrew/keg_fix_install_names.rb +++ b/Library/Homebrew/keg_fix_install_names.rb @@ -38,16 +38,14 @@ class Keg end end - (pkgconfig_files | libtool_files | script_files).each do |file| - file.ensure_writable do - file.open('rb') do |f| - s = f.read - s.gsub!(old_cellar, new_cellar) - s.gsub!(old_prefix, new_prefix) - f.reopen(file, 'wb') - f.write(s) - end - end + files = pkgconfig_files | libtool_files | script_files + + files.group_by { |f| f.stat.ino }.each_value do |first, *rest| + s = first.open("rb", &:read) + s.gsub!(old_cellar, new_cellar) + s.gsub!(old_prefix, new_prefix) + first.atomic_write(s) + rest.each { |file| FileUtils.ln(first, file, :force => true) } end end