From 023aff10c7ec66b194badac612fb83b444190e53 Mon Sep 17 00:00:00 2001 From: Jack Nagel Date: Wed, 24 Jul 2013 19:44:27 -0500 Subject: Adjust logic to properly sort erlang versions Fixes Homebrew/homebrew#21417. --- Library/Homebrew/test/test_versions.rb | 6 ++++++ Library/Homebrew/version.rb | 23 ++++++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) (limited to 'Library') diff --git a/Library/Homebrew/test/test_versions.rb b/Library/Homebrew/test/test_versions.rb index 965868e86..1922d82ea 100644 --- a/Library/Homebrew/test/test_versions.rb +++ b/Library/Homebrew/test/test_versions.rb @@ -46,6 +46,12 @@ class VersionComparisonTests < Test::Unit::TestCase def test_compare_patchlevel_to_non_patchlevel assert_operator version('9.9.3-P1'), :>, version('9.9.3') end + + def test_erlang_version + versions = %w{R16B R15B03-1 R15B03 R15B02 R15B01 R14B04 R14B03 + R14B02 R14B01 R14B R13B04 R13B03 R13B02-1}.reverse + assert_equal versions, versions.sort_by { |v| version(v) } + end end class VersionParsingTests < Test::Unit::TestCase diff --git a/Library/Homebrew/version.rb b/Library/Homebrew/version.rb index e9af49844..64ef24d1e 100644 --- a/Library/Homebrew/version.rb +++ b/Library/Homebrew/version.rb @@ -80,12 +80,12 @@ class Version class CompositeToken < StringToken def rev - value[/([0-9]+)/, 1] + value[/([0-9]+)/, 1] || "0" end end class AlphaToken < CompositeToken - PATTERN = /a(?:lpha)?[0-9]+/i + PATTERN = /a(?:lpha)?[0-9]*/i def <=>(other) case other @@ -98,7 +98,7 @@ class Version end class BetaToken < CompositeToken - PATTERN = /b(?:eta)?[0-9]+/i + PATTERN = /b(?:eta)?[0-9]*/i def <=>(other) case other @@ -115,7 +115,7 @@ class Version end class RCToken < CompositeToken - PATTERN = /rc[0-9]+/i + PATTERN = /rc[0-9]*/i def <=>(other) case other @@ -132,7 +132,7 @@ class Version end class PatchToken < CompositeToken - PATTERN = /p[0-9]+/i + PATTERN = /p[0-9]*/i def <=>(other) case other @@ -192,9 +192,18 @@ class Version protected + def begins_with_numeric? + NumericToken === tokens.first + end + def pad_to(length) - nums, rest = tokens.partition { |t| NumericToken === t } - nums.concat([NULL_TOKEN]*(length - tokens.length)).concat(rest) + if begins_with_numeric? + nums, rest = tokens.partition { |t| NumericToken === t } + nums.fill(NULL_TOKEN, nums.length, length - tokens.length) + nums.concat(rest) + else + tokens.dup.fill(NULL_TOKEN, tokens.length, length - tokens.length) + end end def tokens -- cgit v1.2.3