| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  | # typed: true | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-21 16:11:37 +11:00
										 |  |  | require "pkg_version" | 
					
						
							| 
									
										
										
										
											2016-11-03 16:28:16 -07:00
										 |  |  | require "version/null" | 
					
						
							| 
									
										
										
										
											2021-01-20 14:54:02 -08:00
										 |  |  | require "version/parser" | 
					
						
							| 
									
										
										
										
											2016-11-03 16:28:16 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  | # A formula's version. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # @api private | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  | class Version | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |   extend T::Sig | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-18 13:34:31 -05:00
										 |  |  |   include Comparable | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { params(name: T.any(String, Symbol), full: T::Boolean).returns(Regexp) } | 
					
						
							| 
									
										
										
										
											2018-06-18 14:36:51 +01:00
										 |  |  |   def self.formula_optionally_versioned_regex(name, full: true) | 
					
						
							|  |  |  |     /#{"^" if full}#{Regexp.escape(name)}(@\d[\d.]*)?#{"$" if full}/ | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 17:17:03 -05:00
										 |  |  |   # A part of a {Version}. | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |   class Token | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |     extend T::Sig | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     extend T::Helpers | 
					
						
							|  |  |  |     abstract! | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     include Comparable | 
					
						
							| 
									
										
										
										
											2012-08-18 13:34:31 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { params(val: String).returns(Token) } | 
					
						
							| 
									
										
										
										
											2020-08-01 18:46:38 -07:00
										 |  |  |     def self.create(val) | 
					
						
							|  |  |  |       raise TypeError, "Token value must be a string; got a #{val.class} (#{val})" unless val.respond_to?(:to_str) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       case val | 
					
						
							|  |  |  |       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 | 
					
						
							| 
									
										
										
										
											2020-10-04 14:43:32 -04:00
										 |  |  |       when /\A#{PostToken::PATTERN}\z/o    then PostToken | 
					
						
							| 
									
										
										
										
											2020-08-01 18:46:38 -07:00
										 |  |  |       when /\A#{NumericToken::PATTERN}\z/o then NumericToken | 
					
						
							|  |  |  |       when /\A#{StringToken::PATTERN}\z/o  then StringToken | 
					
						
							| 
									
										
										
										
											2021-07-27 05:12:15 +01:00
										 |  |  |       else raise "Cannot find a matching token pattern" | 
					
						
							| 
									
										
										
										
											2020-08-01 18:46:38 -07:00
										 |  |  |       end.new(val) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { params(val: T.untyped).returns(T.nilable(Token)) } | 
					
						
							| 
									
										
										
										
											2020-08-01 18:46:38 -07:00
										 |  |  |     def self.from(val) | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |       return NULL_TOKEN if val.nil? || (val.respond_to?(:null?) && val.null?) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-01 18:46:38 -07:00
										 |  |  |       case val | 
					
						
							|  |  |  |       when Token   then val | 
					
						
							|  |  |  |       when String  then Token.create(val) | 
					
						
							|  |  |  |       when Integer then Token.create(val.to_s) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { returns(T.nilable(T.any(String, Integer))) } | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     attr_reader :value | 
					
						
							| 
									
										
										
										
											2013-04-15 15:00:57 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { params(value: T.nilable(T.any(String, Integer))).void } | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     def initialize(value) | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |       @value = T.let(value, T.untyped) | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { abstract.params(other: T.untyped).returns(T.nilable(Integer)) } | 
					
						
							|  |  |  |     def <=>(other); end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |     sig { returns(String) } | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     def inspect | 
					
						
							| 
									
										
										
										
											2014-07-01 15:07:06 -05:00
										 |  |  |       "#<#{self.class.name} #{value.inspect}>" | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-06-05 23:30:55 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { returns(Integer) } | 
					
						
							| 
									
										
										
										
											2020-08-11 12:22:14 -07:00
										 |  |  |     def hash | 
					
						
							|  |  |  |       value.hash | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { returns(Float) } | 
					
						
							| 
									
										
										
										
											2020-08-11 12:22:14 -07:00
										 |  |  |     def to_f | 
					
						
							|  |  |  |       value.to_f | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { returns(Integer) } | 
					
						
							| 
									
										
										
										
											2020-08-11 12:22:14 -07:00
										 |  |  |     def to_i | 
					
						
							|  |  |  |       value.to_i | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { returns(String) } | 
					
						
							| 
									
										
										
										
											2013-06-05 23:30:55 -05:00
										 |  |  |     def to_s | 
					
						
							|  |  |  |       value.to_s | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2020-08-28 10:25:52 -07:00
										 |  |  |     alias to_str to_s | 
					
						
							| 
									
										
										
										
											2015-03-17 21:37:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |     sig { returns(T::Boolean) } | 
					
						
							| 
									
										
										
										
											2015-03-17 21:37:03 -04:00
										 |  |  |     def numeric? | 
					
						
							|  |  |  |       false | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     sig { returns(T::Boolean) } | 
					
						
							|  |  |  |     def null? | 
					
						
							|  |  |  |       false | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-08-18 13:34:31 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  |   # A pseudo-token representing the absence of a token. | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |   class NullToken < Token | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |     extend T::Sig | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(NilClass) } | 
					
						
							|  |  |  |     attr_reader :value | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sig { void } | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  |     def initialize | 
					
						
							|  |  |  |       super(nil) | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.params(other: T.untyped).returns(T.nilable(Integer)) } | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     def <=>(other) | 
					
						
							| 
									
										
										
										
											2021-02-12 18:33:37 +05:30
										 |  |  |       return unless (other = Token.from(other)) | 
					
						
							| 
									
										
										
										
											2020-08-01 18:46:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |       case other | 
					
						
							| 
									
										
										
										
											2015-03-17 21:37:03 -04:00
										 |  |  |       when NullToken | 
					
						
							|  |  |  |         0
 | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |       when NumericToken | 
					
						
							| 
									
										
										
										
											2016-09-17 15:17:27 +01:00
										 |  |  |         other.value.zero? ? 0 : -1
 | 
					
						
							| 
									
										
										
										
											2017-06-27 03:17:23 -07:00
										 |  |  |       when AlphaToken, BetaToken, PreToken, RCToken | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |         1
 | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         -1
 | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(T::Boolean) } | 
					
						
							| 
									
										
										
										
											2020-08-11 12:22:14 -07:00
										 |  |  |     def null? | 
					
						
							|  |  |  |       true | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(String) } | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     def inspect | 
					
						
							| 
									
										
										
										
											2014-07-01 15:07:06 -05:00
										 |  |  |       "#<#{self.class.name}>" | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-08-18 13:34:31 -05:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  |   private_constant :NullToken | 
					
						
							| 
									
										
										
										
											2012-08-18 13:34:31 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  |   # Represents the absence of a token. | 
					
						
							| 
									
										
										
										
											2019-04-19 21:46:20 +09:00
										 |  |  |   NULL_TOKEN = NullToken.new.freeze | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  |   # A token string. | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |   class StringToken < Token | 
					
						
							| 
									
										
										
										
											2020-07-28 18:25:40 -04:00
										 |  |  |     PATTERN = /[a-z]+/i.freeze | 
					
						
							| 
									
										
										
										
											2013-01-15 18:20:52 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(String) } | 
					
						
							|  |  |  |     attr_reader :value | 
					
						
							| 
									
										
										
										
											2020-08-19 17:12:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { params(value: String).void } | 
					
						
							|  |  |  |     def initialize(value) | 
					
						
							|  |  |  |       super(value.to_s) | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-01-15 18:20:52 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.params(other: T.untyped).returns(T.nilable(Integer)) } | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     def <=>(other) | 
					
						
							| 
									
										
										
										
											2021-02-12 18:33:37 +05:30
										 |  |  |       return unless (other = Token.from(other)) | 
					
						
							| 
									
										
										
										
											2020-08-01 18:46:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |       case other | 
					
						
							|  |  |  |       when StringToken | 
					
						
							|  |  |  |         value <=> other.value | 
					
						
							|  |  |  |       when NumericToken, NullToken | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |         -T.must(other <=> self) | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-08-18 13:34:31 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  |   # A token consisting of only numbers. | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |   class NumericToken < Token | 
					
						
							| 
									
										
										
										
											2018-11-02 17:18:07 +00:00
										 |  |  |     PATTERN = /[0-9]+/i.freeze | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |     extend T::Sig | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(Integer) } | 
					
						
							|  |  |  |     attr_reader :value | 
					
						
							| 
									
										
										
										
											2020-08-19 17:12:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { params(value: T.any(String, Integer)).void } | 
					
						
							|  |  |  |     def initialize(value) | 
					
						
							|  |  |  |       super(value.to_i) | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.params(other: T.untyped).returns(T.nilable(Integer)) } | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     def <=>(other) | 
					
						
							| 
									
										
										
										
											2021-02-12 18:33:37 +05:30
										 |  |  |       return unless (other = Token.from(other)) | 
					
						
							| 
									
										
										
										
											2020-08-01 18:46:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |       case other | 
					
						
							|  |  |  |       when NumericToken | 
					
						
							|  |  |  |         value <=> other.value | 
					
						
							|  |  |  |       when StringToken | 
					
						
							|  |  |  |         1
 | 
					
						
							|  |  |  |       when NullToken | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |         -T.must(other <=> self) | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2015-03-17 21:37:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.returns(T::Boolean) } | 
					
						
							| 
									
										
										
										
											2015-03-17 21:37:03 -04:00
										 |  |  |     def numeric? | 
					
						
							|  |  |  |       true | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-08-18 13:34:31 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  |   # A token consisting of an alphabetic and a numeric part. | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |   class CompositeToken < StringToken | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { returns(Integer) } | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     def rev | 
					
						
							| 
									
										
										
										
											2014-10-06 13:55:23 -05:00
										 |  |  |       value[/[0-9]+/].to_i | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-07-09 22:51:10 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 17:17:03 -05:00
										 |  |  |   # A token representing the part of a version designating it as an alpha release. | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |   class AlphaToken < CompositeToken | 
					
						
							| 
									
										
										
										
											2018-11-02 17:18:07 +00:00
										 |  |  |     PATTERN = /alpha[0-9]*|a[0-9]+/i.freeze | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.params(other: T.untyped).returns(T.nilable(Integer)) } | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     def <=>(other) | 
					
						
							| 
									
										
										
										
											2021-02-12 18:33:37 +05:30
										 |  |  |       return unless (other = Token.from(other)) | 
					
						
							| 
									
										
										
										
											2020-08-01 18:46:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |       case other | 
					
						
							|  |  |  |       when AlphaToken | 
					
						
							|  |  |  |         rev <=> other.rev | 
					
						
							| 
									
										
										
										
											2020-10-04 14:43:32 -04:00
										 |  |  |       when BetaToken, RCToken, PreToken, PatchToken, PostToken | 
					
						
							| 
									
										
										
										
											2017-06-27 03:17:23 -07:00
										 |  |  |         -1
 | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |       else | 
					
						
							|  |  |  |         super | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-07-10 16:10:16 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 17:17:03 -05:00
										 |  |  |   # A token representing the part of a version designating it as a beta release. | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |   class BetaToken < CompositeToken | 
					
						
							| 
									
										
										
										
											2018-11-02 17:18:07 +00:00
										 |  |  |     PATTERN = /beta[0-9]*|b[0-9]+/i.freeze | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.params(other: T.untyped).returns(T.nilable(Integer)) } | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     def <=>(other) | 
					
						
							| 
									
										
										
										
											2021-02-12 18:33:37 +05:30
										 |  |  |       return unless (other = Token.from(other)) | 
					
						
							| 
									
										
										
										
											2020-08-01 18:46:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |       case other | 
					
						
							|  |  |  |       when BetaToken | 
					
						
							|  |  |  |         rev <=> other.rev | 
					
						
							|  |  |  |       when AlphaToken | 
					
						
							|  |  |  |         1
 | 
					
						
							| 
									
										
										
										
											2020-10-04 14:43:32 -04:00
										 |  |  |       when PreToken, RCToken, PatchToken, PostToken | 
					
						
							| 
									
										
										
										
											2017-06-27 03:17:23 -07:00
										 |  |  |         -1
 | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         super | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 17:17:03 -05:00
										 |  |  |   # A token representing the part of a version designating it as a pre-release. | 
					
						
							| 
									
										
										
										
											2017-06-27 03:17:23 -07:00
										 |  |  |   class PreToken < CompositeToken | 
					
						
							| 
									
										
										
										
											2018-11-02 17:18:07 +00:00
										 |  |  |     PATTERN = /pre[0-9]*/i.freeze | 
					
						
							| 
									
										
										
										
											2017-06-27 03:17:23 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.params(other: T.untyped).returns(T.nilable(Integer)) } | 
					
						
							| 
									
										
										
										
											2017-06-27 03:17:23 -07:00
										 |  |  |     def <=>(other) | 
					
						
							| 
									
										
										
										
											2021-02-12 18:33:37 +05:30
										 |  |  |       return unless (other = Token.from(other)) | 
					
						
							| 
									
										
										
										
											2020-08-01 18:46:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-27 03:17:23 -07:00
										 |  |  |       case other | 
					
						
							|  |  |  |       when PreToken | 
					
						
							|  |  |  |         rev <=> other.rev | 
					
						
							|  |  |  |       when AlphaToken, BetaToken | 
					
						
							|  |  |  |         1
 | 
					
						
							| 
									
										
										
										
											2020-10-04 14:43:32 -04:00
										 |  |  |       when RCToken, PatchToken, PostToken | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |         -1
 | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         super | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-07-09 22:51:10 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 17:17:03 -05:00
										 |  |  |   # A token representing the part of a version designating it as a release candidate. | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |   class RCToken < CompositeToken | 
					
						
							| 
									
										
										
										
											2018-11-02 17:18:07 +00:00
										 |  |  |     PATTERN = /rc[0-9]*/i.freeze | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.params(other: T.untyped).returns(T.nilable(Integer)) } | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     def <=>(other) | 
					
						
							| 
									
										
										
										
											2021-02-12 18:33:37 +05:30
										 |  |  |       return unless (other = Token.from(other)) | 
					
						
							| 
									
										
										
										
											2020-08-01 18:46:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |       case other | 
					
						
							|  |  |  |       when RCToken | 
					
						
							|  |  |  |         rev <=> other.rev | 
					
						
							| 
									
										
										
										
											2017-06-27 03:17:23 -07:00
										 |  |  |       when AlphaToken, BetaToken, PreToken | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |         1
 | 
					
						
							| 
									
										
										
										
											2020-10-04 14:43:32 -04:00
										 |  |  |       when PatchToken, PostToken | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |         -1
 | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         super | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-07-09 23:00:40 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 17:17:03 -05:00
										 |  |  |   # A token representing the part of a version designating it as a patch release. | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |   class PatchToken < CompositeToken | 
					
						
							| 
									
										
										
										
											2018-11-02 17:18:07 +00:00
										 |  |  |     PATTERN = /p[0-9]*/i.freeze | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.params(other: T.untyped).returns(T.nilable(Integer)) } | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |     def <=>(other) | 
					
						
							| 
									
										
										
										
											2021-02-12 18:33:37 +05:30
										 |  |  |       return unless (other = Token.from(other)) | 
					
						
							| 
									
										
										
										
											2020-08-01 18:46:38 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |       case other | 
					
						
							|  |  |  |       when PatchToken | 
					
						
							|  |  |  |         rev <=> other.rev | 
					
						
							| 
									
										
										
										
											2017-06-27 03:17:23 -07:00
										 |  |  |       when AlphaToken, BetaToken, RCToken, PreToken | 
					
						
							| 
									
										
										
										
											2013-06-05 21:52:48 -05:00
										 |  |  |         1
 | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         super | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-08-18 13:34:31 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 17:17:03 -05:00
										 |  |  |   # A token representing the part of a version designating it as a post release. | 
					
						
							| 
									
										
										
										
											2020-10-04 14:43:32 -04:00
										 |  |  |   class PostToken < CompositeToken | 
					
						
							|  |  |  |     PATTERN = /.post[0-9]+/i.freeze | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     sig { override.params(other: T.untyped).returns(T.nilable(Integer)) } | 
					
						
							| 
									
										
										
										
											2020-10-04 14:43:32 -04:00
										 |  |  |     def <=>(other) | 
					
						
							| 
									
										
										
										
											2021-02-12 18:33:37 +05:30
										 |  |  |       return unless (other = Token.from(other)) | 
					
						
							| 
									
										
										
										
											2020-10-04 14:43:32 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |       case other | 
					
						
							|  |  |  |       when PostToken | 
					
						
							|  |  |  |         rev <=> other.rev | 
					
						
							|  |  |  |       when AlphaToken, BetaToken, RCToken, PreToken | 
					
						
							|  |  |  |         1
 | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         super | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-03 11:19:57 -05:00
										 |  |  |   SCAN_PATTERN = Regexp.union( | 
					
						
							|  |  |  |     AlphaToken::PATTERN, | 
					
						
							|  |  |  |     BetaToken::PATTERN, | 
					
						
							| 
									
										
										
										
											2017-06-27 03:17:23 -07:00
										 |  |  |     PreToken::PATTERN, | 
					
						
							| 
									
										
										
										
											2014-04-03 11:19:57 -05:00
										 |  |  |     RCToken::PATTERN, | 
					
						
							|  |  |  |     PatchToken::PATTERN, | 
					
						
							| 
									
										
										
										
											2020-10-04 14:43:32 -04:00
										 |  |  |     PostToken::PATTERN, | 
					
						
							| 
									
										
										
										
											2014-04-03 11:19:57 -05:00
										 |  |  |     NumericToken::PATTERN, | 
					
						
							| 
									
										
										
										
											2017-02-12 15:06:54 +00:00
										 |  |  |     StringToken::PATTERN, | 
					
						
							| 
									
										
										
										
											2019-04-19 21:46:20 +09:00
										 |  |  |   ).freeze | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  |   private_constant :SCAN_PATTERN | 
					
						
							| 
									
										
										
										
											2014-04-03 11:19:57 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { params(url: T.any(String, Pathname), specs: T.untyped).returns(Version) } | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  |   def self.detect(url, **specs) | 
					
						
							|  |  |  |     parse(specs.fetch(:tag, url), detected_from_url: true) | 
					
						
							| 
									
										
										
										
											2013-06-28 21:17:12 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { params(val: String).returns(Version) } | 
					
						
							| 
									
										
										
										
											2016-06-18 20:33:03 +03:00
										 |  |  |   def self.create(val) | 
					
						
							| 
									
										
										
										
											2019-02-19 13:11:32 +00:00
										 |  |  |     raise TypeError, "Version value must be a string; got a #{val.class} (#{val})" unless val.respond_to?(:to_str) | 
					
						
							| 
									
										
										
										
											2016-06-18 20:33:03 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if val.to_str.start_with?("HEAD") | 
					
						
							|  |  |  |       HeadVersion.new(val) | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       Version.new(val) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { params(spec: T.any(String, Pathname), detected_from_url: T::Boolean).returns(Version) } | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  |   def self.parse(spec, detected_from_url: false) | 
					
						
							| 
									
										
										
										
											2020-12-14 02:08:00 +01:00
										 |  |  |     version = _parse(spec, detected_from_url: detected_from_url) | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  |     version.nil? ? NULL : new(version, detected_from_url: detected_from_url) | 
					
						
							| 
									
										
										
										
											2013-02-06 22:25:02 -06:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { params(spec: T.any(String, Pathname), detected_from_url: T::Boolean).returns(T.nilable(String)) } | 
					
						
							| 
									
										
										
										
											2020-12-14 02:08:00 +01:00
										 |  |  |   def self._parse(spec, detected_from_url:) | 
					
						
							|  |  |  |     spec = CGI.unescape(spec.to_s) if detected_from_url | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  |     spec = Pathname.new(spec) unless spec.is_a? Pathname | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-20 14:54:02 -08:00
										 |  |  |     VERSION_PARSERS.each do |parser| | 
					
						
							|  |  |  |       version = parser.parse(spec) | 
					
						
							|  |  |  |       return version if version.present? | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-20 14:54:02 -08:00
										 |  |  |     nil | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |   private_class_method :_parse | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-28 16:59:51 -08:00
										 |  |  |   NUMERIC_WITH_OPTIONAL_DOTS = /(?:\d+(?:\.\d+)*)/.source.freeze | 
					
						
							|  |  |  |   private_constant :NUMERIC_WITH_OPTIONAL_DOTS | 
					
						
							| 
									
										
										
										
											2021-01-26 16:57:45 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-28 16:59:51 -08:00
										 |  |  |   NUMERIC_WITH_DOTS = /(?:\d+(?:\.\d+)+)/.source.freeze | 
					
						
							|  |  |  |   private_constant :NUMERIC_WITH_DOTS | 
					
						
							| 
									
										
										
										
											2021-01-26 16:57:45 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   MINOR_OR_PATCH = /(?:\d+(?:\.\d+){1,2})/.source.freeze | 
					
						
							|  |  |  |   private_constant :MINOR_OR_PATCH | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-28 16:42:44 -08:00
										 |  |  |   CONTENT_SUFFIX = /(?:[._-](?i:bin|dist|stable|src|sources?|final|full))/.source.freeze | 
					
						
							|  |  |  |   private_constant :CONTENT_SUFFIX | 
					
						
							| 
									
										
										
										
											2021-01-26 16:57:45 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-28 16:42:44 -08:00
										 |  |  |   PRERELEASE_SUFFIX = /(?:[._-]?(?i:alpha|beta|pre|rc)\.?\d{,2})/.source.freeze | 
					
						
							|  |  |  |   private_constant :PRERELEASE_SUFFIX | 
					
						
							| 
									
										
										
										
											2021-01-26 16:57:45 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-20 14:54:02 -08:00
										 |  |  |   VERSION_PARSERS = [ | 
					
						
							| 
									
										
										
										
											2017-05-01 22:42:57 +02:00
										 |  |  |     # date-based versioning | 
					
						
							|  |  |  |     # e.g. ltopers-v2017-04-14.tar.gz | 
					
						
							| 
									
										
										
										
											2021-01-20 14:54:02 -08:00
										 |  |  |     StemParser.new(/-v?(\d{4}-\d{2}-\d{2})/), | 
					
						
							| 
									
										
										
										
											2017-05-01 22:42:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-27 15:21:05 -05:00
										 |  |  |     # GitHub tarballs | 
					
						
							|  |  |  |     # e.g. https://github.com/foo/bar/tarball/v1.2.3 | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  |     # e.g. https://github.com/sam-github/libnet/tarball/libnet-1.1.4 | 
					
						
							|  |  |  |     # e.g. https://github.com/isaacs/npm/tarball/v0.2.5-1 | 
					
						
							|  |  |  |     # e.g. https://github.com/petdance/ack/tarball/1.93_02 | 
					
						
							| 
									
										
										
										
											2021-01-26 16:19:21 -08:00
										 |  |  |     UrlParser.new(%r{github\.com/.+/(?:zip|tar)ball/(?:v|\w+-)?((?:\d+[._-])+\d*)$}), | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-25 10:20:48 -07:00
										 |  |  |     # e.g. https://github.com/erlang/otp/tarball/OTP_R15B01 (erlang style) | 
					
						
							| 
									
										
										
										
											2021-01-26 16:19:59 -08:00
										 |  |  |     UrlParser.new(/[_-]([Rr]\d+[AaBb]\d*(?:-\d+)?)/), | 
					
						
							| 
									
										
										
										
											2012-08-25 10:20:48 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  |     # e.g. boost_1_39_0 | 
					
						
							| 
									
										
										
										
											2021-01-20 14:54:02 -08:00
										 |  |  |     StemParser.new(/((?:\d+_)+\d+)$/) { |s| s.tr("_", ".") }, | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # e.g. foobar-4.5.1-1 | 
					
						
							| 
									
										
										
										
											2015-01-29 23:56:40 +01:00
										 |  |  |     # e.g. unrtf_0.20.4-1 | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  |     # e.g. ruby-1.9.1-p243 | 
					
						
							| 
									
										
										
										
											2021-07-13 21:28:19 -04:00
										 |  |  |     StemParser.new(/[_-](#{NUMERIC_WITH_DOTS}-(?:p|P|rc|RC)?\d+)#{CONTENT_SUFFIX}?$/), | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-06 19:40:39 -04:00
										 |  |  |     # Hyphenated versions without software-name prefix (e.g. brew-) | 
					
						
							|  |  |  |     # e.g. v0.0.8-12.tar.gz | 
					
						
							|  |  |  |     # e.g. 3.3.04-1.tar.gz | 
					
						
							|  |  |  |     # e.g. v2.1-20210510.tar.gz | 
					
						
							|  |  |  |     # e.g. 2020.11.11-3.tar.gz | 
					
						
							|  |  |  |     # e.g. v3.6.6-0.2 | 
					
						
							|  |  |  |     StemParser.new(/^v?(#{NUMERIC_WITH_DOTS}(?:-#{NUMERIC_WITH_OPTIONAL_DOTS})+)/), | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-19 11:11:14 -08:00
										 |  |  |     # URL with no extension | 
					
						
							|  |  |  |     # e.g. https://waf.io/waf-1.8.12 | 
					
						
							|  |  |  |     # e.g. https://codeload.github.com/gsamokovarov/jump/tar.gz/v0.7.1 | 
					
						
							| 
									
										
										
										
											2021-01-28 16:59:51 -08:00
										 |  |  |     UrlParser.new(/[-v](#{NUMERIC_WITH_OPTIONAL_DOTS})$/), | 
					
						
							| 
									
										
										
										
											2015-12-26 19:55:19 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  |     # e.g. lame-398-1 | 
					
						
							| 
									
										
										
										
											2021-01-20 14:54:02 -08:00
										 |  |  |     StemParser.new(/-(\d+-\d+)/), | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # e.g. foobar-4.5.1 | 
					
						
							| 
									
										
										
										
											2021-01-28 16:59:51 -08:00
										 |  |  |     StemParser.new(/-(#{NUMERIC_WITH_OPTIONAL_DOTS})$/), | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-04 14:43:32 -04:00
										 |  |  |     # e.g. foobar-4.5.1.post1 | 
					
						
							| 
									
										
										
										
											2021-01-28 16:59:51 -08:00
										 |  |  |     StemParser.new(/-(#{NUMERIC_WITH_OPTIONAL_DOTS}(.post\d+)?)$/), | 
					
						
							| 
									
										
										
										
											2020-10-04 14:43:32 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  |     # e.g. foobar-4.5.1b | 
					
						
							| 
									
										
										
										
											2021-01-28 16:59:51 -08:00
										 |  |  |     StemParser.new(/-(#{NUMERIC_WITH_OPTIONAL_DOTS}(?:[abc]|rc|RC)\d*)$/), | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-23 04:13:29 -04:00
										 |  |  |     # e.g. foobar-4.5.0-alpha5, foobar-4.5.0-beta1, or foobar-4.50-beta | 
					
						
							| 
									
										
										
										
											2021-01-28 16:59:51 -08:00
										 |  |  |     StemParser.new(/-(#{NUMERIC_WITH_OPTIONAL_DOTS}-(?:alpha|beta|rc)\d*)$/), | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-12 19:44:01 +00:00
										 |  |  |     # e.g. https://ftpmirror.gnu.org/libidn/libidn-1.29-win64.zip | 
					
						
							|  |  |  |     # e.g. https://ftpmirror.gnu.org/libmicrohttpd/libmicrohttpd-0.9.17-w32.zip | 
					
						
							| 
									
										
										
										
											2021-01-26 16:57:45 -08:00
										 |  |  |     StemParser.new(/-(#{MINOR_OR_PATCH})-w(?:in)?(?:32|64)$/), | 
					
						
							| 
									
										
										
										
											2015-01-28 09:28:20 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-02 22:52:25 +02:00
										 |  |  |     # Opam packages | 
					
						
							|  |  |  |     # e.g. https://opam.ocaml.org/archives/sha.1.9+opam.tar.gz | 
					
						
							|  |  |  |     # e.g. https://opam.ocaml.org/archives/lablgtk.2.18.3+opam.tar.gz | 
					
						
							|  |  |  |     # e.g. https://opam.ocaml.org/archives/easy-format.1.0.2+opam.tar.gz | 
					
						
							| 
									
										
										
										
											2021-01-26 16:57:45 -08:00
										 |  |  |     StemParser.new(/\.(#{MINOR_OR_PATCH})\+opam$/), | 
					
						
							| 
									
										
										
										
											2015-10-02 22:52:25 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-12 19:44:01 +00:00
										 |  |  |     # e.g. https://ftpmirror.gnu.org/mtools/mtools-4.0.18-1.i686.rpm | 
					
						
							|  |  |  |     # e.g. https://ftpmirror.gnu.org/autogen/autogen-5.5.7-5.i386.rpm | 
					
						
							|  |  |  |     # e.g. https://ftpmirror.gnu.org/libtasn1/libtasn1-2.8-x86.zip | 
					
						
							|  |  |  |     # e.g. https://ftpmirror.gnu.org/libtasn1/libtasn1-2.8-x64.zip | 
					
						
							|  |  |  |     # e.g. https://ftpmirror.gnu.org/mtools/mtools_4.0.18_i386.deb | 
					
						
							| 
									
										
										
										
											2021-01-26 16:57:45 -08:00
										 |  |  |     StemParser.new(/[_-](#{MINOR_OR_PATCH}(?:-\d+)?)[._-](?:i[36]86|x86|x64(?:[_-](?:32|64))?)$/), | 
					
						
							| 
									
										
										
										
											2015-01-28 09:28:20 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-21 19:56:26 -04:00
										 |  |  |     # e.g. https://registry.npmjs.org/@angular/cli/-/cli-1.3.0-beta.1.tgz | 
					
						
							|  |  |  |     # e.g. https://github.com/dlang/dmd/archive/v2.074.0-beta1.tar.gz | 
					
						
							|  |  |  |     # e.g. https://github.com/dlang/dmd/archive/v2.074.0-rc1.tar.gz | 
					
						
							|  |  |  |     # e.g. https://github.com/premake/premake-core/releases/download/v5.0.0-alpha10/premake-5.0.0-alpha10-src.zip | 
					
						
							| 
									
										
										
										
											2023-02-01 10:48:45 +08:00
										 |  |  |     StemParser.new(/[-.vV]?(#{NUMERIC_WITH_DOTS}#{PRERELEASE_SUFFIX})/), | 
					
						
							| 
									
										
										
										
											2017-07-21 19:56:26 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  |     # e.g. foobar4.5.1 | 
					
						
							| 
									
										
										
										
											2021-01-28 16:59:51 -08:00
										 |  |  |     StemParser.new(/(#{NUMERIC_WITH_OPTIONAL_DOTS})$/), | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # e.g. foobar-4.5.0-bin | 
					
						
							| 
									
										
										
										
											2021-01-28 16:59:51 -08:00
										 |  |  |     StemParser.new(/[-vV](#{NUMERIC_WITH_DOTS}[abc]?)#{CONTENT_SUFFIX}$/), | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-21 19:56:26 -04:00
										 |  |  |     # dash version style | 
					
						
							|  |  |  |     # e.g. http://www.antlr.org/download/antlr-3.4-complete.jar | 
					
						
							|  |  |  |     # e.g. https://cdn.nuxeo.com/nuxeo-9.2/nuxeo-server-9.2-tomcat.zip | 
					
						
							|  |  |  |     # e.g. https://search.maven.org/remotecontent?filepath=com/facebook/presto/presto-cli/0.181/presto-cli-0.181-executable.jar | 
					
						
							|  |  |  |     # e.g. https://search.maven.org/remotecontent?filepath=org/fusesource/fuse-extra/fusemq-apollo-mqtt/1.3/fusemq-apollo-mqtt-1.3-uber.jar | 
					
						
							|  |  |  |     # e.g. https://search.maven.org/remotecontent?filepath=org/apache/orc/orc-tools/1.2.3/orc-tools-1.2.3-uber.jar | 
					
						
							| 
									
										
										
										
											2021-01-28 16:59:51 -08:00
										 |  |  |     StemParser.new(/-(#{NUMERIC_WITH_DOTS})-/), | 
					
						
							| 
									
										
										
										
											2017-07-21 19:56:26 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  |     # e.g. dash_0.5.5.1.orig.tar.gz (Debian style) | 
					
						
							| 
									
										
										
										
											2021-01-28 16:59:51 -08:00
										 |  |  |     StemParser.new(/_(#{NUMERIC_WITH_DOTS}[abc]?)\.orig$/), | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-04 05:02:27 +01:00
										 |  |  |     # e.g. https://www.openssl.org/source/openssl-0.9.8s.tar.gz | 
					
						
							| 
									
										
										
										
											2021-01-20 14:54:02 -08:00
										 |  |  |     StemParser.new(/-v?(\d[^-]+)/), | 
					
						
							| 
									
										
										
										
											2012-07-09 23:24:27 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # e.g. astyle_1.23_macosx.tar.gz | 
					
						
							| 
									
										
										
										
											2021-01-20 14:54:02 -08:00
										 |  |  |     StemParser.new(/_v?(\d[^_]+)/), | 
					
						
							| 
									
										
										
										
											2012-10-16 10:31:03 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # e.g. http://mirrors.jenkins-ci.org/war/1.486/jenkins.war | 
					
						
							| 
									
										
										
										
											2016-02-17 12:26:45 +01:00
										 |  |  |     # e.g. https://github.com/foo/bar/releases/download/0.10.11/bar.phar | 
					
						
							| 
									
										
										
										
											2017-06-26 16:16:45 -04:00
										 |  |  |     # e.g. https://github.com/clojure/clojurescript/releases/download/r1.9.293/cljs.jar | 
					
						
							|  |  |  |     # e.g. https://github.com/fibjs/fibjs/releases/download/v0.6.1/fullsrc.zip | 
					
						
							|  |  |  |     # e.g. https://wwwlehre.dhbw-stuttgart.de/~sschulz/WORK/E_DOWNLOAD/V_1.9/E.tgz | 
					
						
							|  |  |  |     # e.g. https://github.com/JustArchi/ArchiSteamFarm/releases/download/2.3.2.0/ASF.zip | 
					
						
							|  |  |  |     # e.g. https://people.gnome.org/~newren/eg/download/1.7.5.2/eg | 
					
						
							| 
									
										
										
										
											2021-01-20 14:54:02 -08:00
										 |  |  |     UrlParser.new(%r{/(?:[rvV]_?)?(\d+\.\d+(?:\.\d+){,2})}), | 
					
						
							| 
									
										
										
										
											2013-01-27 22:34:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-03 21:03:22 +00:00
										 |  |  |     # e.g. https://www.ijg.org/files/jpegsrc.v8d.tar.gz | 
					
						
							| 
									
										
										
										
											2021-01-20 14:54:02 -08:00
										 |  |  |     StemParser.new(/\.v(\d+[a-z]?)/), | 
					
						
							| 
									
										
										
										
											2017-10-03 23:29:33 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # e.g. https://secure.php.net/get/php-7.1.10.tar.bz2/from/this/mirror | 
					
						
							| 
									
										
										
										
											2023-02-01 10:48:45 +08:00
										 |  |  |     UrlParser.new(/[-.vV]?(#{NUMERIC_WITH_DOTS}#{PRERELEASE_SUFFIX}?)/), | 
					
						
							| 
									
										
										
										
											2021-01-20 14:54:02 -08:00
										 |  |  |   ].freeze | 
					
						
							|  |  |  |   private_constant :VERSION_PARSERS | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-21 16:11:37 +11:00
										 |  |  |   sig { params(val: T.any(PkgVersion, String, Version), detected_from_url: T::Boolean).void } | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  |   def initialize(val, detected_from_url: false) | 
					
						
							| 
									
										
										
										
											2019-02-19 13:11:32 +00:00
										 |  |  |     raise TypeError, "Version value must be a string; got a #{val.class} (#{val})" unless val.respond_to?(:to_str) | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |     @version = val.to_str | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  |     @detected_from_url = detected_from_url | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { returns(T::Boolean) } | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |   def detected_from_url? | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  |     @detected_from_url | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { returns(T::Boolean) } | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |   def head? | 
					
						
							|  |  |  |     false | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { returns(T::Boolean) } | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |   def null? | 
					
						
							|  |  |  |     false | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { params(other: T.untyped).returns(T.nilable(Integer)) } | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |   def <=>(other) | 
					
						
							|  |  |  |     # Needed to retain API compatibility with older string comparisons | 
					
						
							|  |  |  |     # for compiler versions, etc. | 
					
						
							|  |  |  |     other = Version.new(other) if other.is_a? String | 
					
						
							|  |  |  |     # Used by the *_build_version comparisons, which formerly returned Fixnum | 
					
						
							|  |  |  |     other = Version.new(other.to_s) if other.is_a? Integer | 
					
						
							|  |  |  |     return 1 if other.nil? | 
					
						
							| 
									
										
										
										
											2020-08-11 13:58:48 -07:00
										 |  |  |     return 1 if other.respond_to?(:null?) && other.null? | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-11 12:23:07 -07:00
										 |  |  |     other = Version.new(other.to_s) if other.is_a? Token | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |     return unless other.is_a?(Version) | 
					
						
							|  |  |  |     return 0 if version == other.version | 
					
						
							|  |  |  |     return 1 if head? && !other.head? | 
					
						
							|  |  |  |     return -1 if !head? && other.head? | 
					
						
							|  |  |  |     return 0 if head? && other.head? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ltokens = tokens | 
					
						
							|  |  |  |     rtokens = other.tokens | 
					
						
							|  |  |  |     max = max(ltokens.length, rtokens.length) | 
					
						
							|  |  |  |     l = r = 0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     while l < max | 
					
						
							|  |  |  |       a = ltokens[l] || NULL_TOKEN | 
					
						
							|  |  |  |       b = rtokens[r] || NULL_TOKEN | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if a == b | 
					
						
							|  |  |  |         l += 1
 | 
					
						
							|  |  |  |         r += 1
 | 
					
						
							|  |  |  |         next | 
					
						
							| 
									
										
										
										
											2020-11-13 17:21:51 +01:00
										 |  |  |       elsif a.numeric? && !b.numeric? | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |         return 1 if a > NULL_TOKEN | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |         l += 1
 | 
					
						
							| 
									
										
										
										
											2020-11-13 17:21:51 +01:00
										 |  |  |       elsif !a.numeric? && b.numeric? | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |         return -1 if b > NULL_TOKEN | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |         r += 1
 | 
					
						
							| 
									
										
										
										
											2020-11-13 17:21:51 +01:00
										 |  |  |       else | 
					
						
							|  |  |  |         return a <=> b | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     0
 | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |   alias eql? == | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-24 11:44:12 -08:00
										 |  |  |   # @api public | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { returns(T.nilable(Token)) } | 
					
						
							| 
									
										
										
										
											2020-08-01 16:38:31 -07:00
										 |  |  |   def major | 
					
						
							| 
									
										
										
										
											2020-08-12 10:14:11 -07:00
										 |  |  |     tokens.first | 
					
						
							| 
									
										
										
										
											2020-08-01 16:38:31 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-24 11:44:12 -08:00
										 |  |  |   # @api public | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { returns(T.nilable(Token)) } | 
					
						
							| 
									
										
										
										
											2020-08-01 16:38:31 -07:00
										 |  |  |   def minor | 
					
						
							| 
									
										
										
										
											2020-08-12 10:14:11 -07:00
										 |  |  |     tokens.second | 
					
						
							| 
									
										
										
										
											2020-08-01 16:38:31 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-24 11:44:12 -08:00
										 |  |  |   # @api public | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { returns(T.nilable(Token)) } | 
					
						
							| 
									
										
										
										
											2020-08-01 16:38:31 -07:00
										 |  |  |   def patch | 
					
						
							| 
									
										
										
										
											2020-08-12 10:14:11 -07:00
										 |  |  |     tokens.third | 
					
						
							| 
									
										
										
										
											2020-08-01 16:38:31 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-24 11:44:12 -08:00
										 |  |  |   # @api public | 
					
						
							| 
									
										
										
										
											2021-02-09 18:34:20 +00:00
										 |  |  |   sig { returns(T.self_type) } | 
					
						
							| 
									
										
										
										
											2020-08-01 16:38:31 -07:00
										 |  |  |   def major_minor | 
					
						
							| 
									
										
										
										
											2021-02-09 18:34:20 +00:00
										 |  |  |     self.class.new([major, minor].compact.join(".")) | 
					
						
							| 
									
										
										
										
											2020-08-01 16:38:31 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-24 11:44:12 -08:00
										 |  |  |   # @api public | 
					
						
							| 
									
										
										
										
											2021-02-09 18:34:20 +00:00
										 |  |  |   sig { returns(T.self_type) } | 
					
						
							| 
									
										
										
										
											2020-08-01 16:38:31 -07:00
										 |  |  |   def major_minor_patch | 
					
						
							| 
									
										
										
										
											2021-02-09 18:34:20 +00:00
										 |  |  |     self.class.new([major, minor, patch].compact.join(".")) | 
					
						
							| 
									
										
										
										
											2020-08-01 16:38:31 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { returns(T::Boolean) } | 
					
						
							| 
									
										
										
										
											2020-06-27 21:03:16 -04:00
										 |  |  |   def empty? | 
					
						
							|  |  |  |     version.empty? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { returns(Integer) } | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |   def hash | 
					
						
							|  |  |  |     version.hash | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { returns(Float) } | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |   def to_f | 
					
						
							|  |  |  |     version.to_f | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { returns(Integer) } | 
					
						
							| 
									
										
										
										
											2017-11-05 12:11:57 +00:00
										 |  |  |   def to_i | 
					
						
							|  |  |  |     version.to_i | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { returns(String) } | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |   def to_s | 
					
						
							|  |  |  |     version.dup | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |   alias to_str to_s | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-02 03:25:55 +01:00
										 |  |  |   sig { returns(T.self_type) } | 
					
						
							|  |  |  |   def freeze | 
					
						
							|  |  |  |     tokens # Determine and store tokens before freezing | 
					
						
							|  |  |  |     super | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |   protected | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { returns(String) } | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |   attr_reader :version | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { returns(T::Array[Token]) } | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |   def tokens | 
					
						
							|  |  |  |     @tokens ||= tokenize | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-11 00:04:10 +00:00
										 |  |  |   sig { params(first: Integer, second: Integer).returns(Integer) } | 
					
						
							|  |  |  |   def max(first, second) | 
					
						
							|  |  |  |     (first > second) ? first : second | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { returns(T::Array[Token]) } | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |   def tokenize | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |     version.scan(SCAN_PATTERN).map { |token| Token.create(T.cast(token, String)) } | 
					
						
							| 
									
										
										
										
											2017-10-07 00:31:28 +02:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-07-09 22:51:10 -05:00
										 |  |  | end | 
					
						
							| 
									
										
										
										
											2016-06-18 20:33:03 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 15:19:56 -05:00
										 |  |  | # A formula's HEAD version. | 
					
						
							|  |  |  | # @see https://docs.brew.sh/Formula-Cookbook#unstable-versions-head Unstable versions (head) | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  | # | 
					
						
							|  |  |  | # @api private | 
					
						
							| 
									
										
										
										
											2016-06-18 20:33:03 +03:00
										 |  |  | class HeadVersion < Version | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |   extend T::Sig | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { returns(T.nilable(String)) } | 
					
						
							| 
									
										
										
										
											2016-06-18 20:33:03 +03:00
										 |  |  |   attr_reader :commit | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-09 02:59:18 +02:00
										 |  |  |   def initialize(*) | 
					
						
							| 
									
										
										
										
											2016-06-18 20:33:03 +03:00
										 |  |  |     super | 
					
						
							|  |  |  |     @commit = @version[/^HEAD-(.+)$/, 1] | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-16 11:49:01 -08:00
										 |  |  |   sig { params(commit: T.nilable(String)).void } | 
					
						
							| 
									
										
										
										
											2016-06-18 20:33:03 +03:00
										 |  |  |   def update_commit(commit) | 
					
						
							|  |  |  |     @commit = commit | 
					
						
							|  |  |  |     @version = if commit | 
					
						
							|  |  |  |       "HEAD-#{commit}" | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       "HEAD" | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-20 12:03:48 +02:00
										 |  |  |   sig { returns(T::Boolean) } | 
					
						
							| 
									
										
										
										
											2016-06-18 20:33:03 +03:00
										 |  |  |   def head? | 
					
						
							|  |  |  |     true | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |