Add support for custom version schemes
A version scheme is a class that inherits from Version and reimplements Version#<=>. This will allow formulae to specify a custom comparison method that will be used instead of the default, for cases where the default is insufficient.
This commit is contained in:
parent
741a4168d0
commit
2ff6c40735
@ -52,10 +52,13 @@ class SoftwareSpec
|
||||
end
|
||||
|
||||
def version val=nil
|
||||
if val.nil?
|
||||
@version ||= Version.parse(@url)
|
||||
else
|
||||
@version = Version.new(val)
|
||||
@version ||= case val
|
||||
when nil then Version.parse(@url)
|
||||
when Hash
|
||||
key, value = val.shift
|
||||
scheme = VersionSchemeDetector.new(value).detect
|
||||
scheme.new(key)
|
||||
else Version.new(val)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -278,4 +278,11 @@ class FormulaTests < Test::Unit::TestCase
|
||||
when :mountainlion then '8badf00d8badf00d8badf00d8badf00d8badf00d'
|
||||
end, f.bottle.checksum.hexdigest
|
||||
end
|
||||
|
||||
def test_custom_version_scheme
|
||||
f = CustomVersionSchemeTestBall.new
|
||||
|
||||
assert_version_equal '1.0', f.version
|
||||
assert_instance_of CustomVersionScheme, f.version
|
||||
end
|
||||
end
|
||||
|
@ -271,3 +271,17 @@ class RevisedBottleSpecTestBall < Formula
|
||||
super "revisedbottlespectestball"
|
||||
end
|
||||
end
|
||||
|
||||
class CustomVersionScheme < Version
|
||||
end
|
||||
|
||||
class CustomVersionSchemeTestBall < Formula
|
||||
homepage 'http://example.com'
|
||||
url 'file:///foo.com/testball-0.1.tbz'
|
||||
sha1 '482e737739d946b7c8cbaf127d9ee9c148b999f5'
|
||||
version '1.0' => CustomVersionScheme
|
||||
|
||||
def initialize name=nil
|
||||
super "customversionschemetestball"
|
||||
end
|
||||
end
|
||||
|
@ -126,3 +126,24 @@ class Version
|
||||
return m.captures.first unless m.nil?
|
||||
end
|
||||
end
|
||||
|
||||
class VersionSchemeDetector
|
||||
def initialize scheme
|
||||
@scheme = scheme
|
||||
end
|
||||
|
||||
def detect
|
||||
if @scheme.is_a? Class and @scheme.ancestors.include? Version
|
||||
@scheme
|
||||
elsif @scheme.is_a? Symbol then detect_from_symbol
|
||||
else
|
||||
raise "Unknown version scheme #{@scheme} was requested."
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def detect_from_symbol
|
||||
raise "Unknown version scheme #{@scheme} was requested."
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user