| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  | require "version" | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-17 20:08:45 +02:00
										 |  |  | # Combination of a version and a revision. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # @api private | 
					
						
							| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  | class PkgVersion | 
					
						
							|  |  |  |   include Comparable | 
					
						
							| 
									
										
										
										
											2020-08-11 13:01:54 -07:00
										 |  |  |   extend Forwardable | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-17 20:08:45 +02:00
										 |  |  |   REGEX = /\A(.+?)(?:_(\d+))?\z/.freeze | 
					
						
							|  |  |  |   private_constant :REGEX | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-13 10:11:59 +03:00
										 |  |  |   attr_reader :version, :revision | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-17 20:08:45 +02:00
										 |  |  |   delegate [:major, :minor, :patch, :major_minor, :major_minor_patch] => :version | 
					
						
							| 
									
										
										
										
											2020-08-11 13:01:54 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  |   def self.parse(path) | 
					
						
							| 
									
										
										
										
											2020-08-17 20:08:45 +02:00
										 |  |  |     _, version, revision = *path.match(REGEX) | 
					
						
							| 
									
										
										
										
											2016-06-18 20:52:01 +03:00
										 |  |  |     version = Version.create(version) | 
					
						
							| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  |     new(version, revision.to_i) | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def initialize(version, revision) | 
					
						
							| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  |     @version = version | 
					
						
							| 
									
										
										
										
											2016-06-18 20:52:01 +03:00
										 |  |  |     @revision = revision | 
					
						
							| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  |   def head? | 
					
						
							|  |  |  |     version.head? | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def to_s | 
					
						
							| 
									
										
										
										
											2017-09-24 20:12:58 +01:00
										 |  |  |     if revision.positive? | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  |       "#{version}_#{revision}" | 
					
						
							|  |  |  |     else | 
					
						
							| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  |       version.to_s | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2016-09-23 18:13:48 +02:00
										 |  |  |   alias to_str to_s | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def <=>(other) | 
					
						
							| 
									
										
										
										
											2016-09-20 22:03:08 +02:00
										 |  |  |     return unless other.is_a?(PkgVersion) | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 11:28:28 +00:00
										 |  |  |     version_comparison = (version <=> other.version) | 
					
						
							|  |  |  |     return if version_comparison.nil? | 
					
						
							| 
									
										
										
										
											2020-03-03 10:43:54 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 11:28:28 +00:00
										 |  |  |     version_comparison.nonzero? || revision <=> other.revision | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2016-09-23 18:13:48 +02:00
										 |  |  |   alias eql? == | 
					
						
							| 
									
										
										
										
											2015-04-02 20:22:12 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def hash | 
					
						
							|  |  |  |     version.hash ^ revision.hash | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2014-03-05 20:12:51 -06:00
										 |  |  | end |