diff options
| author | Jack Nagel | 2014-06-19 21:35:47 -0500 |
|---|---|---|
| committer | Jack Nagel | 2014-06-20 21:32:36 -0500 |
| commit | 10fda9e9b910f9161a8f174e13cf0f31edfbde80 (patch) | |
| tree | 422a9100abf73d7ce1dfc6225436cac695db83d1 /Library | |
| parent | 5beaa512e61f7222d4f19569b8118f9e1f02a18f (diff) | |
| download | brew-10fda9e9b910f9161a8f174e13cf0f31edfbde80.tar.bz2 | |
Decouple spec selection from ARGV
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/build.rb | 3 | ||||
| -rw-r--r-- | Library/Homebrew/extend/ARGV.rb | 15 | ||||
| -rw-r--r-- | Library/Homebrew/formula.rb | 15 | ||||
| -rw-r--r-- | Library/Homebrew/formula_installer.rb | 7 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_formula.rb | 12 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_formula_spec_selection.rb | 53 |
6 files changed, 55 insertions, 50 deletions
diff --git a/Library/Homebrew/build.rb b/Library/Homebrew/build.rb index 5a320f3b8..03a0189d9 100644 --- a/Library/Homebrew/build.rb +++ b/Library/Homebrew/build.rb @@ -40,7 +40,8 @@ def main # can be inconvenient for the user. But we need to be safe. system "/usr/bin/sudo", "-k" - Build.new(Formula.factory($0)).install + formula = Formulary.factory($0, ARGV.spec) + Build.new(formula).install rescue Exception => e unless error_pipe.nil? e.continuation = nil if ARGV.debug? diff --git a/Library/Homebrew/extend/ARGV.rb b/Library/Homebrew/extend/ARGV.rb index 25c2f882a..bb6a56fe9 100644 --- a/Library/Homebrew/extend/ARGV.rb +++ b/Library/Homebrew/extend/ARGV.rb @@ -8,9 +8,8 @@ module HomebrewArgvExtension end def formulae - require 'formula' - @formulae ||= downcased_unique_named.map{ |name| Formula.factory name } - return @formulae + require "formula" + @formulae ||= downcased_unique_named.map { |name| Formulary.factory(name, spec) } end def kegs @@ -179,6 +178,16 @@ module HomebrewArgvExtension value 'env' end + def spec + if include?("--HEAD") + :head + elsif include?("--devel") + :devel + else + :stable + end + end + private def downcased_unique_named diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 93170ef64..d84d64a13 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -36,7 +36,7 @@ class Formula set_spec :devel set_spec :head - @active_spec = determine_active_spec + @active_spec = determine_active_spec(spec) validate_attributes :url, :name, :version @build = determine_build_options @pkg_version = PkgVersion.new(version, revision) @@ -52,16 +52,9 @@ class Formula end end - def determine_active_spec - case - when head && ARGV.build_head? then head # --HEAD - when devel && ARGV.build_devel? then devel # --devel - when stable then stable - when devel then devel - when head then head # head-only - else - raise FormulaSpecificationError, "formulae require at least a URL" - end + def determine_active_spec(requested) + spec = send(requested) || stable || devel || head + spec or raise FormulaSpecificationError, "formulae require at least a URL" end def validate_attributes(*attrs) diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index e96ac69e9..b53632993 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -471,8 +471,11 @@ class FormulaInstaller args << "--debug" if debug? args << "--cc=#{ARGV.cc}" if ARGV.cc args << "--env=#{ARGV.env}" if ARGV.env - args << "--HEAD" if ARGV.build_head? - args << "--devel" if ARGV.build_devel? + + case f.active_spec + when f.head then args << "--HEAD" + when f.devel then args << "--devel" + end f.build.each do |opt, _| name = opt.name[/\A(.+)=\z$/, 1] diff --git a/Library/Homebrew/test/test_formula.rb b/Library/Homebrew/test/test_formula.rb index c4a9c1587..95bf7e021 100644 --- a/Library/Homebrew/test/test_formula.rb +++ b/Library/Homebrew/test/test_formula.rb @@ -92,9 +92,7 @@ class FormulaTests < Homebrew::TestCase end def test_installed_prefix_head_active_spec - ARGV.stubs(:build_head? => true) - - f = formula do + f = formula("test", Pathname.new(__FILE__).expand_path, :head) do head 'foo' devel do url 'foo' @@ -106,9 +104,7 @@ class FormulaTests < Homebrew::TestCase end def test_installed_prefix_devel_active_spec - ARGV.stubs(:build_devel? => true) - - f = formula do + f = formula("test", Pathname.new(__FILE__).expand_path, :devel) do head 'foo' devel do url 'foo' @@ -244,9 +240,7 @@ class FormulaTests < Homebrew::TestCase end def test_head_ignores_revisions - ARGV.stubs(:build_head?).returns(true) - - f = formula do + f = formula("test", Pathname.new(__FILE__).expand_path, :head) do url 'foo-1.0.bar' revision 1 head 'foo' diff --git a/Library/Homebrew/test/test_formula_spec_selection.rb b/Library/Homebrew/test/test_formula_spec_selection.rb index 19cdadffd..aeb55fc1a 100644 --- a/Library/Homebrew/test/test_formula_spec_selection.rb +++ b/Library/Homebrew/test/test_formula_spec_selection.rb @@ -10,30 +10,6 @@ class FormulaSpecSelectionTests < Homebrew::TestCase assert_nil @_f.send(spec) end - def test_selects_head_when_requested - ARGV.stubs(:build_head?).returns(true) - - formula do - url 'foo-1.0' - devel { url 'foo-1.1a' } - head 'foo' - end - - assert_spec_selected :head - end - - def test_selects_devel_when_requested - ARGV.stubs(:build_devel?).returns(true) - - formula do - url 'foo-1.0' - devel { url 'foo-1.1a' } - head 'foo' - end - - assert_spec_selected :devel - end - def test_selects_stable_by_default formula do url 'foo-1.0' @@ -98,6 +74,26 @@ class FormulaSpecSelectionTests < Homebrew::TestCase assert_spec_selected :devel end + def test_selects_head_when_requested + formula("test", Pathname.new(__FILE__).expand_path, :head) do + url 'foo-1.0' + devel { url 'foo-1.1a' } + head 'foo' + end + + assert_spec_selected :head + end + + def test_selects_devel_when_requested + formula("test", Pathname.new(__FILE__).expand_path, :devel) do + url 'foo-1.0' + devel { url 'foo-1.1a' } + head 'foo' + end + + assert_spec_selected :devel + end + def test_incomplete_devel_not_set formula do url 'foo-1.0' @@ -108,4 +104,13 @@ class FormulaSpecSelectionTests < Homebrew::TestCase assert_spec_unset :devel assert_spec_selected :stable end + + def test_does_not_raise_for_missing_spec + formula("test", Pathname.new(__FILE__).expand_path, :devel) do + url 'foo-1.0' + head 'foo' + end + + assert_spec_selected :stable + end end |
