Replace version strings with Version objects

This commit is contained in:
Jack Nagel 2012-07-10 16:01:02 -05:00
parent 43dc54e8b9
commit 329f0a8490
9 changed files with 53 additions and 49 deletions

View File

@ -21,7 +21,7 @@ module Homebrew extend self
end
end
prefix = HOMEBREW_CELLAR+name+version
prefix = HOMEBREW_CELLAR/name/version
if File.file? 'CMakeLists.txt'
puts "-DCMAKE_INSTALL_PREFIX=#{prefix}"

View File

@ -13,7 +13,7 @@ module Homebrew extend self
else
f.versions do |version, sha|
print Tty.white.to_s
print "#{version.ljust(8)} "
print "#{version.to_s.ljust(8)} "
print Tty.reset.to_s
puts "git checkout #{sha} #{f.pretty_relative_path}"
end

View File

@ -163,8 +163,7 @@ class Pathname
def version
require 'version'
version = Version.parse(self)
version.to_s unless version.nil?
Version.parse(self)
end
def compression_type

View File

@ -108,7 +108,7 @@ class Formula
def prefix
validate_variable :name
validate_variable :version
HOMEBREW_CELLAR+@name+@version
HOMEBREW_CELLAR/@name/@version
end
def rack; prefix.parent end
@ -543,7 +543,7 @@ private
def validate_variable name
v = instance_variable_get("@#{name}")
raise "Invalid @#{name}" if v.to_s.empty? or v =~ /\s/
raise "Invalid @#{name}" if v.to_s.empty? or v.to_s =~ /\s/
end
def set_instance_variable(type)

View File

@ -1,5 +1,6 @@
require 'download_strategy'
require 'checksums'
require 'version'
class SoftwareSpec
attr_reader :checksum, :mirrors, :specs
@ -58,12 +59,12 @@ class SoftwareSpec
end
def version val=nil
unless val.nil?
@version = val
if val.nil?
@version ||= Version.parse(@url)
else
@version = Version.new(val)
@explicit_version = true
end
@version ||= Pathname.new(@url).version
return @version
end
def mirror val
@ -73,7 +74,7 @@ class SoftwareSpec
end
class HeadSoftwareSpec < SoftwareSpec
def initialize url=nil, version='HEAD'
def initialize url=nil, version=Version.new(:HEAD)
super
end
@ -120,7 +121,7 @@ class Bottle < SoftwareSpec
# as accessor for @version to preserve the interface
def version val=nil
if val.nil?
return @version ||= Pathname.new(@url).version
return @version ||= Version.parse(@url)
else
@revision = val
end

View File

@ -22,6 +22,8 @@ end
# separate TestCase classes.
class BeerTasting < Test::Unit::TestCase
include VersionAssertions
def test_supported_compressed_types
assert_nothing_raised do
MockFormula.new 'test-0.1.tar.gz'
@ -129,12 +131,6 @@ class BeerTasting < Test::Unit::TestCase
assert_equal 10.7, f+0.1
end
def test_pathname_version
d=HOMEBREW_CELLAR+'foo-0.1.9'
d.mkpath
assert_equal '0.1.9', d.version
end
def test_pathname_plus_yeast
nostdout do
assert_nothing_raised do
@ -176,12 +172,12 @@ class BeerTasting < Test::Unit::TestCase
assert_equal '.tar.gz', foo1.extname
assert_equal 'foo-0.1', foo1.stem
assert_equal '0.1', foo1.version
assert_version_equal '0.1', foo1.version
foo1 = HOMEBREW_CACHE/'foo-0.1.cpio.gz'
assert_equal '.cpio.gz', foo1.extname
assert_equal 'foo-0.1', foo1.stem
assert_equal '0.1', foo1.version
assert_version_equal '0.1', foo1.version
end
class MockMockFormula < Struct.new(:name); end

View File

@ -10,6 +10,7 @@ class MostlyAbstractFormula < Formula
end
class FormulaTests < Test::Unit::TestCase
include VersionAssertions
def test_prefix
nostdout do
@ -65,7 +66,7 @@ class FormulaTests < Test::Unit::TestCase
assert_equal 'http://example.com', f.homepage
assert_equal 'file:///foo.com/testball-0.1.tbz', f.url
assert_equal 1, f.mirrors.length
assert_equal '0.1', f.version
assert_version_equal '0.1', f.version
assert_equal f.stable, f.active_spec
assert_equal CurlDownloadStrategy, f.download_strategy
assert_instance_of CurlDownloadStrategy, f.downloader
@ -124,10 +125,10 @@ class FormulaTests < Test::Unit::TestCase
assert !f.stable.explicit_version?
assert !f.bottle.explicit_version?
assert !f.devel.explicit_version?
assert_equal '0.1', f.stable.version
assert_equal '0.1', f.bottle.version
assert_equal '0.2', f.devel.version
assert_equal 'HEAD', f.head.version
assert_version_equal '0.1', f.stable.version
assert_version_equal '0.1', f.bottle.version
assert_version_equal '0.2', f.devel.version
assert_version_equal 'HEAD', f.head.version
assert_equal 0, f.bottle.revision
end
@ -135,7 +136,7 @@ class FormulaTests < Test::Unit::TestCase
ARGV.push '--devel'
f = SpecTestBall.new
assert_equal f.devel, f.active_spec
assert_equal '0.2', f.version
assert_version_equal '0.2', f.version
assert_equal 'file:///foo.com/testball-0.2.tbz', f.url
assert_equal CurlDownloadStrategy, f.download_strategy
assert_instance_of CurlDownloadStrategy, f.downloader
@ -146,7 +147,7 @@ class FormulaTests < Test::Unit::TestCase
ARGV.push '--HEAD'
f = SpecTestBall.new
assert_equal f.head, f.active_spec
assert_equal 'HEAD', f.version
assert_version_equal 'HEAD', f.version
assert_equal 'https://github.com/mxcl/homebrew.git', f.url
assert_equal GitDownloadStrategy, f.download_strategy
assert_instance_of GitDownloadStrategy, f.downloader
@ -155,9 +156,9 @@ class FormulaTests < Test::Unit::TestCase
def test_explicit_version_spec
f = ExplicitVersionSpecTestBall.new
assert_equal '0.3', f.version
assert_equal '0.3', f.stable.version
assert_equal '0.4', f.devel.version
assert_version_equal '0.3', f.version
assert_version_equal '0.3', f.stable.version
assert_version_equal '0.4', f.devel.version
assert f.stable.explicit_version?
assert f.devel.explicit_version?
end
@ -183,7 +184,7 @@ class FormulaTests < Test::Unit::TestCase
assert !f.bottle.explicit_version?
assert_equal 0, f.bottle.revision
assert_equal '0.1', f.bottle.version
assert_version_equal '0.1', f.bottle.version
else
assert_nil f.bottle
end
@ -203,7 +204,7 @@ class FormulaTests < Test::Unit::TestCase
assert_nil f.devel
assert_equal f.head, f.active_spec
assert_equal 'HEAD', f.version
assert_version_equal 'HEAD', f.version
assert_nil f.head.checksum
assert_equal 'https://github.com/mxcl/homebrew.git', f.url
assert_equal GitDownloadStrategy, f.download_strategy
@ -220,7 +221,7 @@ class FormulaTests < Test::Unit::TestCase
assert_nil f.devel
assert_equal f.head, f.active_spec
assert_equal 'HEAD', f.version
assert_version_equal 'HEAD', f.version
assert_nil f.head.checksum
assert_equal 'https://github.com/mxcl/homebrew.git', f.url
assert_equal GitDownloadStrategy, f.download_strategy
@ -237,7 +238,7 @@ class FormulaTests < Test::Unit::TestCase
assert_nil f.devel
assert_equal f.head, f.active_spec
assert_equal 'HEAD', f.version
assert_version_equal 'HEAD', f.version
assert_nil f.head.checksum
assert_equal 'https://github.com/mxcl/homebrew.git', f.url
assert_equal GitDownloadStrategy, f.download_strategy

View File

@ -3,20 +3,6 @@ require 'formula'
require 'test/testball'
require 'version'
module VersionAssertions
def assert_version_detected expected, url
assert_equal expected, Version.parse(url).to_s
end
def assert_version_nil url
assert_nil Version.parse(url)
end
def assert_version_comparison a, comparison, b
eval "assert Version.new(a) #{comparison} Version.new(b)"
end
end
class TestBadVersion < TestBall
def initialize name=nil
@stable = SoftwareSpec.new
@ -34,6 +20,9 @@ class VersionComparisonTests < Test::Unit::TestCase
assert_version_comparison '1.2.3', '>', '1.2.2'
assert_version_comparison '1.2.3-p34', '>', '1.2.3-p33'
assert_version_comparison '1.2.4', '<', '1.2.4.1'
assert_version_comparison 'HEAD', '==', 'HEAD'
assert_version_comparison 'HEAD', '>', '1.2.3'
assert_version_comparison '1.2.3', '<', 'HEAD'
end
end
@ -43,7 +32,7 @@ class VersionParsingTests < Test::Unit::TestCase
def test_pathname_version
d = HOMEBREW_CELLAR/'foo-0.1.9'
d.mkpath
assert_equal '0.1.9', d.version
assert_version_equal '0.1.9', d.version
end
def test_no_version

View File

@ -65,3 +65,21 @@ ARGV.extend(HomebrewArgvExtension)
require 'extend/ENV'
ENV.extend(HomebrewEnvExtension)
module VersionAssertions
def assert_version_equal expected, actual
assert_equal Version.new(expected), actual
end
def assert_version_detected expected, url
assert_equal expected, Version.parse(url).to_s
end
def assert_version_nil url
assert_nil Version.parse(url)
end
def assert_version_comparison a, comparison, b
eval "assert Version.new(a) #{comparison} Version.new(b)"
end
end