diff options
Diffstat (limited to 'Library/Homebrew')
| -rw-r--r-- | Library/Homebrew/exceptions.rb | 9 | ||||
| -rw-r--r-- | Library/Homebrew/formula_installer.rb | 23 |
2 files changed, 16 insertions, 16 deletions
diff --git a/Library/Homebrew/exceptions.rb b/Library/Homebrew/exceptions.rb index fbdb261ba..8c1c46998 100644 --- a/Library/Homebrew/exceptions.rb +++ b/Library/Homebrew/exceptions.rb @@ -100,15 +100,6 @@ class FormulaInstallationAlreadyAttemptedError < Homebrew::InstallationError end end -class UnsatisfiedDependencyError < Homebrew::InstallationError - def initialize(f, dep, inherited_options) - super f, <<-EOS.undent - #{f} dependency #{dep} not installed with: - #{dep.missing_options(inherited_options) * ', '} - EOS - end -end - class UnsatisfiedRequirements < Homebrew::InstallationError attr_reader :reqs diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index 81a8a5bc9..39aabc3ff 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -303,8 +303,6 @@ class FormulaInstaller Dependency.prune elsif dep.satisfied?(options) Dependency.skip - elsif dep.installed? - raise UnsatisfiedDependencyError.new(f, dep, options) end end end @@ -361,7 +359,16 @@ class FormulaInstaller df = dep.to_formula tab = Tab.for_formula(df) - linked_keg = Keg.new(df.linked_keg.realpath) if df.linked_keg.directory? + if df.linked_keg.directory? + linked_keg = Keg.new(df.linked_keg.realpath) + linked_keg.unlink + end + + if df.installed? + installed_keg = Keg.new(df.prefix) + tmp_keg = Pathname.new("#{installed_keg}.tmp") + installed_keg.rename(tmp_keg) + end fi = DependencyInstaller.new(df) fi.options |= tab.used_options @@ -372,13 +379,15 @@ class FormulaInstaller fi.debug = debug? fi.prelude oh1 "Installing #{f} dependency: #{Tty.green}#{dep.name}#{Tty.reset}" - linked_keg.unlink if linked_keg fi.install fi.caveats fi.finish - ensure - # restore previous installation state if build failed - linked_keg.link if linked_keg and not df.installed? rescue nil + rescue Exception + tmp_keg.rename(installed_keg) if tmp_keg && !installed_keg.directory? + linked_keg.link if linked_keg + raise + else + tmp_keg.rmtree if tmp_keg && tmp_keg.directory? end def caveats |
