Automatically reinstall up-to-date dependencies that are missing options
Closes Homebrew/homebrew#21223.
This commit is contained in:
parent
710db1fb72
commit
309171e4f4
@ -100,15 +100,6 @@ class FormulaInstallationAlreadyAttemptedError < Homebrew::InstallationError
|
|||||||
end
|
end
|
||||||
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
|
class UnsatisfiedRequirements < Homebrew::InstallationError
|
||||||
attr_reader :reqs
|
attr_reader :reqs
|
||||||
|
|
||||||
|
|||||||
@ -303,8 +303,6 @@ class FormulaInstaller
|
|||||||
Dependency.prune
|
Dependency.prune
|
||||||
elsif dep.satisfied?(options)
|
elsif dep.satisfied?(options)
|
||||||
Dependency.skip
|
Dependency.skip
|
||||||
elsif dep.installed?
|
|
||||||
raise UnsatisfiedDependencyError.new(f, dep, options)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -361,7 +359,16 @@ class FormulaInstaller
|
|||||||
df = dep.to_formula
|
df = dep.to_formula
|
||||||
tab = Tab.for_formula(df)
|
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 = DependencyInstaller.new(df)
|
||||||
fi.options |= tab.used_options
|
fi.options |= tab.used_options
|
||||||
@ -372,13 +379,15 @@ class FormulaInstaller
|
|||||||
fi.debug = debug?
|
fi.debug = debug?
|
||||||
fi.prelude
|
fi.prelude
|
||||||
oh1 "Installing #{f} dependency: #{Tty.green}#{dep.name}#{Tty.reset}"
|
oh1 "Installing #{f} dependency: #{Tty.green}#{dep.name}#{Tty.reset}"
|
||||||
linked_keg.unlink if linked_keg
|
|
||||||
fi.install
|
fi.install
|
||||||
fi.caveats
|
fi.caveats
|
||||||
fi.finish
|
fi.finish
|
||||||
ensure
|
rescue Exception
|
||||||
# restore previous installation state if build failed
|
tmp_keg.rename(installed_keg) if tmp_keg && !installed_keg.directory?
|
||||||
linked_keg.link if linked_keg and not df.installed? rescue nil
|
linked_keg.link if linked_keg
|
||||||
|
raise
|
||||||
|
else
|
||||||
|
tmp_keg.rmtree if tmp_keg && tmp_keg.directory?
|
||||||
end
|
end
|
||||||
|
|
||||||
def caveats
|
def caveats
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user