From e2fbfc83901fbd885c7a1cc1f471b0f3fe071c15 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Mon, 31 Mar 2014 13:15:07 -0500 Subject: [PATCH] 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. --- Library/Homebrew/formula_installer.rb | 7 ++++++ Library/Homebrew/hooks/bottles.rb | 31 +++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 Library/Homebrew/hooks/bottles.rb diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index c6e179c608..e9c2d7638b 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -11,6 +11,7 @@ require 'cleaner' require 'formula_cellar_checks' require 'install_renamed' require 'cmd/tap' +require 'hooks/bottles' class FormulaInstaller include FormulaCellarChecks @@ -47,6 +48,8 @@ class FormulaInstaller end def pour_bottle? install_bottle_options={:warn=>false} + return true if Homebrew::Hooks::Bottles.formula_has_bottle?(f) + return false if @pour_failed return true if force_bottle? && f.bottle return false if build_from_source? || build_bottle? || interactive? @@ -618,6 +621,10 @@ class FormulaInstaller end 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 downloader = LocalBottleDownloadStrategy.new(f) else diff --git a/Library/Homebrew/hooks/bottles.rb b/Library/Homebrew/hooks/bottles.rb new file mode 100644 index 0000000000..de321c09af --- /dev/null +++ b/Library/Homebrew/hooks/bottles.rb @@ -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