diff options
| author | Jack Nagel | 2014-03-27 14:17:13 -0500 |
|---|---|---|
| committer | Jack Nagel | 2014-03-27 14:23:49 -0500 |
| commit | 51a1696ad63248bf3c309aaaceab045f1d98b5de (patch) | |
| tree | 791ec3d3f9c01961c4d64c5aa113bf25d3b89570 | |
| parent | 2e40afeda71da6dbca39dd57434415f374b4e304 (diff) | |
| download | homebrew-51a1696ad63248bf3c309aaaceab045f1d98b5de.tar.bz2 | |
Replace files atomically when relocating, take two
| -rw-r--r-- | Library/Homebrew/keg_fix_install_names.rb | 18 |
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 |
