From 700b5e2738fad9aa576df25d494e1d7e69962326 Mon Sep 17 00:00:00 2001 From: "Ed Flanagan ed@flanagan.xyz" Date: Tue, 27 Jun 2017 03:17:23 -0700 Subject: [PATCH] Add PreToken composite --- Library/Homebrew/test/version_spec.rb | 15 +++++++++++++++ Library/Homebrew/version.rb | 27 ++++++++++++++++++++++++--- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/test/version_spec.rb b/Library/Homebrew/test/version_spec.rb index 41e05019c4..6c8be7677a 100644 --- a/Library/Homebrew/test/version_spec.rb +++ b/Library/Homebrew/test/version_spec.rb @@ -93,6 +93,21 @@ describe Version do expect(Version.create("1.2.3beta2")).to be < Version.create("1.2.3-p34") end + specify "comparing pre versions" do + expect(Version.create("1.2.3pre9")).to be == Version.create("1.2.3PRE9") + expect(Version.create("1.2.3pre9")).to be > Version.create("1.2.3pre8") + expect(Version.create("1.2.3pre8")).to be < Version.create("1.2.3pre9") + expect(Version.create("1.2.3pre9")).to be < Version.create("1.2.3pre10") + + expect(Version.create("1.2.3pre3")).to be > Version.create("1.2.3alpha2") + expect(Version.create("1.2.3pre3")).to be > Version.create("1.2.3alpha4") + expect(Version.create("1.2.3pre3")).to be > Version.create("1.2.3beta3") + expect(Version.create("1.2.3pre3")).to be > Version.create("1.2.3beta5") + expect(Version.create("1.2.3pre3")).to be < Version.create("1.2.3rc2") + expect(Version.create("1.2.3pre3")).to be < Version.create("1.2.3") + expect(Version.create("1.2.3pre3")).to be < Version.create("1.2.3-p2") + end + specify "comparing RC versions" do expect(Version.create("1.2.3rc3")).to be == Version.create("1.2.3RC3") expect(Version.create("1.2.3rc3")).to be > Version.create("1.2.3rc2") diff --git a/Library/Homebrew/version.rb b/Library/Homebrew/version.rb index f99914c4dc..8a86126eb6 100644 --- a/Library/Homebrew/version.rb +++ b/Library/Homebrew/version.rb @@ -36,7 +36,7 @@ class Version 0 when NumericToken other.value.zero? ? 0 : -1 - when AlphaToken, BetaToken, RCToken + when AlphaToken, BetaToken, PreToken, RCToken 1 else -1 @@ -103,6 +103,8 @@ class Version case other when AlphaToken rev <=> other.rev + when BetaToken, RCToken, PreToken, PatchToken + -1 else super end @@ -118,6 +120,23 @@ class Version rev <=> other.rev when AlphaToken 1 + when PreToken, RCToken, PatchToken + -1 + else + super + end + end + end + + class PreToken < CompositeToken + PATTERN = /pre[0-9]*/i + + def <=>(other) + case other + when PreToken + rev <=> other.rev + when AlphaToken, BetaToken + 1 when RCToken, PatchToken -1 else @@ -133,7 +152,7 @@ class Version case other when RCToken rev <=> other.rev - when AlphaToken, BetaToken + when AlphaToken, BetaToken, PreToken 1 when PatchToken -1 @@ -150,7 +169,7 @@ class Version case other when PatchToken rev <=> other.rev - when AlphaToken, BetaToken, RCToken + when AlphaToken, BetaToken, RCToken, PreToken 1 else super @@ -161,6 +180,7 @@ class Version SCAN_PATTERN = Regexp.union( AlphaToken::PATTERN, BetaToken::PATTERN, + PreToken::PATTERN, RCToken::PATTERN, PatchToken::PATTERN, NumericToken::PATTERN, @@ -289,6 +309,7 @@ class Version when /\A#{AlphaToken::PATTERN}\z/o then AlphaToken when /\A#{BetaToken::PATTERN}\z/o then BetaToken when /\A#{RCToken::PATTERN}\z/o then RCToken + when /\A#{PreToken::PATTERN}\z/o then PreToken when /\A#{PatchToken::PATTERN}\z/o then PatchToken when /\A#{NumericToken::PATTERN}\z/o then NumericToken when /\A#{StringToken::PATTERN}\z/o then StringToken