diff options
| author | Jack Nagel | 2012-07-09 23:00:40 -0500 |
|---|---|---|
| committer | Jack Nagel | 2012-08-18 11:12:07 -0500 |
| commit | 966f555e655e652537785d4141c4c3cd88cbc576 (patch) | |
| tree | 55f72f5792ea8547a38d1f7ec62b4f60d04144ed /Library | |
| parent | 0da83e61587b973a70d85983348fb071da1e5ab8 (diff) | |
| download | homebrew-966f555e655e652537785d4141c4c3cd88cbc576.tar.bz2 | |
Initial version comparison implementation
Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/test/test_versions.rb | 18 | ||||
| -rw-r--r-- | Library/Homebrew/version.rb | 20 |
2 files changed, 36 insertions, 2 deletions
diff --git a/Library/Homebrew/test/test_versions.rb b/Library/Homebrew/test/test_versions.rb index 24569ebc5..4792ac85d 100644 --- a/Library/Homebrew/test/test_versions.rb +++ b/Library/Homebrew/test/test_versions.rb @@ -11,6 +11,10 @@ module VersionAssertions def assert_version_nil url assert_nil Version.parse(url) end + + def assert_comparison a, comparison, b + eval "assert Version.new(a) #{comparison} Version.new(b)" + end end class TestBadVersion < TestBall @@ -21,7 +25,19 @@ class TestBadVersion < TestBall end end -class VersionTests < Test::Unit::TestCase +class VersionComparisonTests < Test::Unit::TestCase + include VersionAssertions + + def test_version_comparisons + assert_comparison '0.1', '==', '0.1.0' + assert_comparison '0.1', '!=', '0.2' + assert_comparison '1.2.3', '>', '1.2.2' + assert_comparison '1.2.3-p34', '>', '1.2.3-p33' + assert_comparison '1.2.4', '<', '1.2.4.1' + end +end + +class VersionParsingTests < Test::Unit::TestCase include VersionAssertions def test_pathname_version diff --git a/Library/Homebrew/version.rb b/Library/Homebrew/version.rb index f03510a68..c10863476 100644 --- a/Library/Homebrew/version.rb +++ b/Library/Homebrew/version.rb @@ -6,12 +6,30 @@ class Version @version = val.to_s.strip end + def head? + @version == 'HEAD' + end + def nums @version.scan(/\d+/).map { |d| d.to_i } end def <=>(other) - @version <=> other.version + return nil unless other.is_a? Version + return 0 if self.head? and other.head? + return 1 if self.head? and not other.head? + return -1 if not self.head? and other.head? + return 1 if other.nil? + + snums = self.nums + onums = other.nums + + count = [snums.length, onums.length].max + + snums.fill(0, snums.length, count - snums.length) + onums.fill(0, onums.length, count - onums.length) + + snums <=> onums end def to_s |
