Decouple spec selection from ARGV
This commit is contained in:
parent
5beaa512e6
commit
10fda9e9b9
@ -40,7 +40,8 @@ def main
|
|||||||
# can be inconvenient for the user. But we need to be safe.
|
# can be inconvenient for the user. But we need to be safe.
|
||||||
system "/usr/bin/sudo", "-k"
|
system "/usr/bin/sudo", "-k"
|
||||||
|
|
||||||
Build.new(Formula.factory($0)).install
|
formula = Formulary.factory($0, ARGV.spec)
|
||||||
|
Build.new(formula).install
|
||||||
rescue Exception => e
|
rescue Exception => e
|
||||||
unless error_pipe.nil?
|
unless error_pipe.nil?
|
||||||
e.continuation = nil if ARGV.debug?
|
e.continuation = nil if ARGV.debug?
|
||||||
|
|||||||
@ -8,9 +8,8 @@ module HomebrewArgvExtension
|
|||||||
end
|
end
|
||||||
|
|
||||||
def formulae
|
def formulae
|
||||||
require 'formula'
|
require "formula"
|
||||||
@formulae ||= downcased_unique_named.map{ |name| Formula.factory name }
|
@formulae ||= downcased_unique_named.map { |name| Formulary.factory(name, spec) }
|
||||||
return @formulae
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def kegs
|
def kegs
|
||||||
@ -179,6 +178,16 @@ module HomebrewArgvExtension
|
|||||||
value 'env'
|
value 'env'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def spec
|
||||||
|
if include?("--HEAD")
|
||||||
|
:head
|
||||||
|
elsif include?("--devel")
|
||||||
|
:devel
|
||||||
|
else
|
||||||
|
:stable
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def downcased_unique_named
|
def downcased_unique_named
|
||||||
|
|||||||
@ -36,7 +36,7 @@ class Formula
|
|||||||
set_spec :devel
|
set_spec :devel
|
||||||
set_spec :head
|
set_spec :head
|
||||||
|
|
||||||
@active_spec = determine_active_spec
|
@active_spec = determine_active_spec(spec)
|
||||||
validate_attributes :url, :name, :version
|
validate_attributes :url, :name, :version
|
||||||
@build = determine_build_options
|
@build = determine_build_options
|
||||||
@pkg_version = PkgVersion.new(version, revision)
|
@pkg_version = PkgVersion.new(version, revision)
|
||||||
@ -52,16 +52,9 @@ class Formula
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def determine_active_spec
|
def determine_active_spec(requested)
|
||||||
case
|
spec = send(requested) || stable || devel || head
|
||||||
when head && ARGV.build_head? then head # --HEAD
|
spec or raise FormulaSpecificationError, "formulae require at least a URL"
|
||||||
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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_attributes(*attrs)
|
def validate_attributes(*attrs)
|
||||||
|
|||||||
@ -471,8 +471,11 @@ class FormulaInstaller
|
|||||||
args << "--debug" if debug?
|
args << "--debug" if debug?
|
||||||
args << "--cc=#{ARGV.cc}" if ARGV.cc
|
args << "--cc=#{ARGV.cc}" if ARGV.cc
|
||||||
args << "--env=#{ARGV.env}" if ARGV.env
|
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, _|
|
f.build.each do |opt, _|
|
||||||
name = opt.name[/\A(.+)=\z$/, 1]
|
name = opt.name[/\A(.+)=\z$/, 1]
|
||||||
|
|||||||
@ -92,9 +92,7 @@ class FormulaTests < Homebrew::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_installed_prefix_head_active_spec
|
def test_installed_prefix_head_active_spec
|
||||||
ARGV.stubs(:build_head? => true)
|
f = formula("test", Pathname.new(__FILE__).expand_path, :head) do
|
||||||
|
|
||||||
f = formula do
|
|
||||||
head 'foo'
|
head 'foo'
|
||||||
devel do
|
devel do
|
||||||
url 'foo'
|
url 'foo'
|
||||||
@ -106,9 +104,7 @@ class FormulaTests < Homebrew::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_installed_prefix_devel_active_spec
|
def test_installed_prefix_devel_active_spec
|
||||||
ARGV.stubs(:build_devel? => true)
|
f = formula("test", Pathname.new(__FILE__).expand_path, :devel) do
|
||||||
|
|
||||||
f = formula do
|
|
||||||
head 'foo'
|
head 'foo'
|
||||||
devel do
|
devel do
|
||||||
url 'foo'
|
url 'foo'
|
||||||
@ -244,9 +240,7 @@ class FormulaTests < Homebrew::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_head_ignores_revisions
|
def test_head_ignores_revisions
|
||||||
ARGV.stubs(:build_head?).returns(true)
|
f = formula("test", Pathname.new(__FILE__).expand_path, :head) do
|
||||||
|
|
||||||
f = formula do
|
|
||||||
url 'foo-1.0.bar'
|
url 'foo-1.0.bar'
|
||||||
revision 1
|
revision 1
|
||||||
head 'foo'
|
head 'foo'
|
||||||
|
|||||||
@ -10,30 +10,6 @@ class FormulaSpecSelectionTests < Homebrew::TestCase
|
|||||||
assert_nil @_f.send(spec)
|
assert_nil @_f.send(spec)
|
||||||
end
|
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
|
def test_selects_stable_by_default
|
||||||
formula do
|
formula do
|
||||||
url 'foo-1.0'
|
url 'foo-1.0'
|
||||||
@ -98,6 +74,26 @@ class FormulaSpecSelectionTests < Homebrew::TestCase
|
|||||||
assert_spec_selected :devel
|
assert_spec_selected :devel
|
||||||
end
|
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
|
def test_incomplete_devel_not_set
|
||||||
formula do
|
formula do
|
||||||
url 'foo-1.0'
|
url 'foo-1.0'
|
||||||
@ -108,4 +104,13 @@ class FormulaSpecSelectionTests < Homebrew::TestCase
|
|||||||
assert_spec_unset :devel
|
assert_spec_unset :devel
|
||||||
assert_spec_selected :stable
|
assert_spec_selected :stable
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user