aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Nagel2014-06-19 21:35:47 -0500
committerJack Nagel2014-06-20 21:32:36 -0500
commit53bbbb1aff1f6399834c4c8818f4144923af5f35 (patch)
tree10fd56e2f494b3050bc85576cfbf24fd16e37d04
parent56c89c48b9a4b6cd57fd9b7bec2da11fc9faa24a (diff)
downloadhomebrew-53bbbb1aff1f6399834c4c8818f4144923af5f35.tar.bz2
Decouple spec selection from ARGV
-rw-r--r--Library/Homebrew/build.rb3
-rw-r--r--Library/Homebrew/extend/ARGV.rb15
-rw-r--r--Library/Homebrew/formula.rb15
-rw-r--r--Library/Homebrew/formula_installer.rb7
-rw-r--r--Library/Homebrew/test/test_formula.rb12
-rw-r--r--Library/Homebrew/test/test_formula_spec_selection.rb53
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