Add hooks for pouring bottles.

This should give us a bit of control over what e.g. Boxen are doing
whilst at the same time stopping us from accidentally breaking each
other's stuff every so often.

I'm aware this may be somewhat controversial so I'm open to other
approaches.
This commit is contained in:
Mike McQuaid 2014-03-31 13:15:07 -05:00
parent d6c9528e59
commit e2fbfc8390
2 changed files with 38 additions and 0 deletions

View File

@ -11,6 +11,7 @@ require 'cleaner'
require 'formula_cellar_checks' require 'formula_cellar_checks'
require 'install_renamed' require 'install_renamed'
require 'cmd/tap' require 'cmd/tap'
require 'hooks/bottles'
class FormulaInstaller class FormulaInstaller
include FormulaCellarChecks include FormulaCellarChecks
@ -47,6 +48,8 @@ class FormulaInstaller
end end
def pour_bottle? install_bottle_options={:warn=>false} def pour_bottle? install_bottle_options={:warn=>false}
return true if Homebrew::Hooks::Bottles.formula_has_bottle?(f)
return false if @pour_failed return false if @pour_failed
return true if force_bottle? && f.bottle return true if force_bottle? && f.bottle
return false if build_from_source? || build_bottle? || interactive? return false if build_from_source? || build_bottle? || interactive?
@ -618,6 +621,10 @@ class FormulaInstaller
end end
def pour def pour
if Homebrew::Hooks::Bottles.formula_has_bottle?(f)
return if Homebrew::Hooks::Bottles.pour_formula_bottle(f)
end
if f.local_bottle_path if f.local_bottle_path
downloader = LocalBottleDownloadStrategy.new(f) downloader = LocalBottleDownloadStrategy.new(f)
else else

View File

@ -0,0 +1,31 @@
# Boxen (and perhaps others) want to override our bottling infrastructure so
# they can avoid declaring checksums in formulae files.
# Instead of periodically breaking their monkeypatches let's add some hooks that
# we can query to allow their own behaviour.
# PLEASE DO NOT EVER RENAME THIS CLASS OR ADD/REMOVE METHOD ARGUMENTS!
module Homebrew
module Hooks
module Bottles
def self.setup_formula_has_bottle &block
@has_bottle = block
true
end
def self.setup_pour_formula_bottle &block
@pour_bottle = block
true
end
def self.formula_has_bottle?(formula)
return false unless @has_bottle
@has_bottle.call formula
end
def self.pour_formula_bottle(formula)
return false unless @pour_bottle
@pour_bottle.call formula
end
end
end
end