aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew')
-rw-r--r--Library/Homebrew/exceptions.rb9
-rw-r--r--Library/Homebrew/formula_installer.rb23
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