diff --git a/Library/Homebrew/cmd/diy.rb b/Library/Homebrew/cmd/diy.rb index 2e71f8890c..174626afcc 100644 --- a/Library/Homebrew/cmd/diy.rb +++ b/Library/Homebrew/cmd/diy.rb @@ -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}" diff --git a/Library/Homebrew/cmd/versions.rb b/Library/Homebrew/cmd/versions.rb index 2675511064..f5fd72ea2e 100644 --- a/Library/Homebrew/cmd/versions.rb +++ b/Library/Homebrew/cmd/versions.rb @@ -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 diff --git a/Library/Homebrew/extend/pathname.rb b/Library/Homebrew/extend/pathname.rb index dec937c54a..8009e98eee 100644 --- a/Library/Homebrew/extend/pathname.rb +++ b/Library/Homebrew/extend/pathname.rb @@ -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 diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index bf7c4f3356..d6f9f8f7b8 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -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) diff --git a/Library/Homebrew/formula_support.rb b/Library/Homebrew/formula_support.rb index 2119fbd116..1b968d8499 100644 --- a/Library/Homebrew/formula_support.rb +++ b/Library/Homebrew/formula_support.rb @@ -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 diff --git a/Library/Homebrew/test/test_bucket.rb b/Library/Homebrew/test/test_bucket.rb index 0758d26232..2963a5532b 100644 --- a/Library/Homebrew/test/test_bucket.rb +++ b/Library/Homebrew/test/test_bucket.rb @@ -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 diff --git a/Library/Homebrew/test/test_formula.rb b/Library/Homebrew/test/test_formula.rb index 686d8b0f07..e60ddd0514 100644 --- a/Library/Homebrew/test/test_formula.rb +++ b/Library/Homebrew/test/test_formula.rb @@ -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 diff --git a/Library/Homebrew/test/test_versions.rb b/Library/Homebrew/test/test_versions.rb index a432b1824e..ab6f83991b 100644 --- a/Library/Homebrew/test/test_versions.rb +++ b/Library/Homebrew/test/test_versions.rb @@ -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 diff --git a/Library/Homebrew/test/testing_env.rb b/Library/Homebrew/test/testing_env.rb index b01fe22956..d0dbd9401b 100644 --- a/Library/Homebrew/test/testing_env.rb +++ b/Library/Homebrew/test/testing_env.rb @@ -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