aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Nagel2014-03-27 14:17:13 -0500
committerJack Nagel2014-03-27 14:23:49 -0500
commit51a1696ad63248bf3c309aaaceab045f1d98b5de (patch)
tree791ec3d3f9c01961c4d64c5aa113bf25d3b89570
parent2e40afeda71da6dbca39dd57434415f374b4e304 (diff)
downloadhomebrew-51a1696ad63248bf3c309aaaceab045f1d98b5de.tar.bz2
Replace files atomically when relocating, take two
-rw-r--r--Library/Homebrew/keg_fix_install_names.rb18
1 files changed, 8 insertions, 10 deletions
diff --git a/Library/Homebrew/keg_fix_install_names.rb b/Library/Homebrew/keg_fix_install_names.rb
index d36eb2543..777a5ed00 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