From c3541d8450b2cb9e93aacc7431d88f129f85116f Mon Sep 17 00:00:00 2001 From: Robert Buonpastore Date: Mon, 26 May 2014 17:14:55 -0400 Subject: ruby: Fix mutually dependent links edge-case Fixes #28759. Closes #29600. Signed-off-by: Jack Nagel --- Library/Formula/ruby.rb | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'Library/Formula') diff --git a/Library/Formula/ruby.rb b/Library/Formula/ruby.rb index d60472fd3..49fbd82e7 100644 --- a/Library/Formula/ruby.rb +++ b/Library/Formula/ruby.rb @@ -62,16 +62,21 @@ class Ruby < Formula end def post_install - # Put gem, site and vendor folders in the HOMEBREW_PREFIX + # Preserve gem, site, and vendor folders on upgrade/reinstall + # by placing them in HOMEBREW_PREFIX and sym-linking ruby_lib = HOMEBREW_PREFIX/"lib/ruby" - (ruby_lib/'site_ruby').mkpath - (ruby_lib/'vendor_ruby').mkpath - (ruby_lib/'gems').mkpath - - rm_rf Dir["#{lib}/ruby/{site_ruby,vendor_ruby,gems}"] - (lib/'ruby').install_symlink ruby_lib/'site_ruby', - ruby_lib/'vendor_ruby', - ruby_lib/'gems' + + ["gems", "site_ruby", "vendor_ruby"].each do |name| + link = lib/"ruby"/name + real = ruby_lib/name + + # only overwrite invalid (mutually dependent) links + real.unlink if real.symlink? && real.readlink == link + real.mkpath + + link.unlink if link.exist? + link.symlink real + end end def caveats; <<-EOS.undent -- cgit v1.2.3