mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-11-04 07:49:35 +00:00 
			
		
		
		
	bump k8s.io/system-validators to v1.7.0
- add blkio as an optionally required cgroup - update blang/semver to v4 - bump the min go version to 1.16
This commit is contained in:
		
							
								
								
									
										26
									
								
								LICENSES/vendor/github.com/blang/semver/v4/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								LICENSES/vendor/github.com/blang/semver/v4/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					= vendor/github.com/blang/semver/v4 licensed under: =
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The MIT License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (c) 2014 Benedikt Lang <github at benediktlang.de>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
				
			||||||
 | 
					of this software and associated documentation files (the "Software"), to deal
 | 
				
			||||||
 | 
					in the Software without restriction, including without limitation the rights
 | 
				
			||||||
 | 
					to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
				
			||||||
 | 
					copies of the Software, and to permit persons to whom the Software is
 | 
				
			||||||
 | 
					furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The above copyright notice and this permission notice shall be included in
 | 
				
			||||||
 | 
					all copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
				
			||||||
 | 
					IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
				
			||||||
 | 
					FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
				
			||||||
 | 
					AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
				
			||||||
 | 
					LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
				
			||||||
 | 
					OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
				
			||||||
 | 
					THE SOFTWARE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					= vendor/github.com/blang/semver/LICENSE 5a3ade42a900439691ebc22013660cae
 | 
				
			||||||
							
								
								
									
										5
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								go.mod
									
									
									
									
									
								
							@@ -132,7 +132,7 @@ require (
 | 
				
			|||||||
	k8s.io/mount-utils v0.0.0
 | 
						k8s.io/mount-utils v0.0.0
 | 
				
			||||||
	k8s.io/pod-security-admission v0.0.0
 | 
						k8s.io/pod-security-admission v0.0.0
 | 
				
			||||||
	k8s.io/sample-apiserver v0.0.0
 | 
						k8s.io/sample-apiserver v0.0.0
 | 
				
			||||||
	k8s.io/system-validators v1.6.0
 | 
						k8s.io/system-validators v1.7.0
 | 
				
			||||||
	k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
 | 
						k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.2.1
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.2.1
 | 
				
			||||||
	sigs.k8s.io/yaml v1.2.0
 | 
						sigs.k8s.io/yaml v1.2.0
 | 
				
			||||||
@@ -179,6 +179,7 @@ replace (
 | 
				
			|||||||
	github.com/beorn7/perks => github.com/beorn7/perks v1.0.1
 | 
						github.com/beorn7/perks => github.com/beorn7/perks v1.0.1
 | 
				
			||||||
	github.com/bits-and-blooms/bitset => github.com/bits-and-blooms/bitset v1.2.0
 | 
						github.com/bits-and-blooms/bitset => github.com/bits-and-blooms/bitset v1.2.0
 | 
				
			||||||
	github.com/blang/semver => github.com/blang/semver v3.5.1+incompatible
 | 
						github.com/blang/semver => github.com/blang/semver v3.5.1+incompatible
 | 
				
			||||||
 | 
						github.com/blang/semver/v4 => github.com/blang/semver/v4 v4.0.0
 | 
				
			||||||
	github.com/boltdb/bolt => github.com/boltdb/bolt v1.3.1
 | 
						github.com/boltdb/bolt => github.com/boltdb/bolt v1.3.1
 | 
				
			||||||
	github.com/census-instrumentation/opencensus-proto => github.com/census-instrumentation/opencensus-proto v0.2.1
 | 
						github.com/census-instrumentation/opencensus-proto => github.com/census-instrumentation/opencensus-proto v0.2.1
 | 
				
			||||||
	github.com/certifi/gocertifi => github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054
 | 
						github.com/certifi/gocertifi => github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054
 | 
				
			||||||
@@ -473,7 +474,7 @@ replace (
 | 
				
			|||||||
	k8s.io/sample-apiserver => ./staging/src/k8s.io/sample-apiserver
 | 
						k8s.io/sample-apiserver => ./staging/src/k8s.io/sample-apiserver
 | 
				
			||||||
	k8s.io/sample-cli-plugin => ./staging/src/k8s.io/sample-cli-plugin
 | 
						k8s.io/sample-cli-plugin => ./staging/src/k8s.io/sample-cli-plugin
 | 
				
			||||||
	k8s.io/sample-controller => ./staging/src/k8s.io/sample-controller
 | 
						k8s.io/sample-controller => ./staging/src/k8s.io/sample-controller
 | 
				
			||||||
	k8s.io/system-validators => k8s.io/system-validators v1.6.0
 | 
						k8s.io/system-validators => k8s.io/system-validators v1.7.0
 | 
				
			||||||
	k8s.io/utils => k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
 | 
						k8s.io/utils => k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
 | 
				
			||||||
	modernc.org/cc => modernc.org/cc v1.0.0
 | 
						modernc.org/cc => modernc.org/cc v1.0.0
 | 
				
			||||||
	modernc.org/golex => modernc.org/golex v1.0.0
 | 
						modernc.org/golex => modernc.org/golex v1.0.0
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								go.sum
									
									
									
									
									
								
							@@ -70,6 +70,8 @@ github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjL
 | 
				
			|||||||
github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
 | 
					github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
 | 
				
			||||||
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
 | 
					github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
 | 
				
			||||||
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
 | 
					github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
 | 
				
			||||||
 | 
					github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
 | 
				
			||||||
 | 
					github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
 | 
				
			||||||
github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4=
 | 
					github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4=
 | 
				
			||||||
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
 | 
					github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
 | 
				
			||||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 | 
					github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 | 
				
			||||||
@@ -547,8 +549,8 @@ k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc=
 | 
				
			|||||||
k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
 | 
					k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
 | 
				
			||||||
k8s.io/kube-openapi v0.0.0-20220323210520-29d726468e05 h1:HC/IqdsYa2juhSDWUEO/MGxGcyUMSMX+aynZ5WcJZeg=
 | 
					k8s.io/kube-openapi v0.0.0-20220323210520-29d726468e05 h1:HC/IqdsYa2juhSDWUEO/MGxGcyUMSMX+aynZ5WcJZeg=
 | 
				
			||||||
k8s.io/kube-openapi v0.0.0-20220323210520-29d726468e05/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk=
 | 
					k8s.io/kube-openapi v0.0.0-20220323210520-29d726468e05/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk=
 | 
				
			||||||
k8s.io/system-validators v1.6.0 h1:21qaPNdZ+mQrm4qc5shU0T5Eh49t/miFqZsn4sW8Hr0=
 | 
					k8s.io/system-validators v1.7.0 h1:tYD3hojdYc58CKtiEsh7BWW6Pg0x6xbclUiwjaIiiYo=
 | 
				
			||||||
k8s.io/system-validators v1.6.0/go.mod h1:bPldcLgkIUK22ALflnsXk8pvkTEndYdNuaHH6gRrl0Q=
 | 
					k8s.io/system-validators v1.7.0/go.mod h1:gP1Ky+R9wtrSiFbrpEPwWMeYz9yqyy1S/KOh0Vci7WI=
 | 
				
			||||||
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc=
 | 
					k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc=
 | 
				
			||||||
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 | 
					k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 | 
				
			||||||
modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw=
 | 
					modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										22
									
								
								vendor/github.com/blang/semver/v4/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/blang/semver/v4/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					The MIT License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (c) 2014 Benedikt Lang <github at benediktlang.de>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
				
			||||||
 | 
					of this software and associated documentation files (the "Software"), to deal
 | 
				
			||||||
 | 
					in the Software without restriction, including without limitation the rights
 | 
				
			||||||
 | 
					to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
				
			||||||
 | 
					copies of the Software, and to permit persons to whom the Software is
 | 
				
			||||||
 | 
					furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The above copyright notice and this permission notice shall be included in
 | 
				
			||||||
 | 
					all copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
				
			||||||
 | 
					IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
				
			||||||
 | 
					FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
				
			||||||
 | 
					AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
				
			||||||
 | 
					LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
				
			||||||
 | 
					OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
				
			||||||
 | 
					THE SOFTWARE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										3
									
								
								vendor/github.com/blang/semver/v4/go.mod
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/blang/semver/v4/go.mod
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					module github.com/blang/semver/v4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go 1.14
 | 
				
			||||||
							
								
								
									
										23
									
								
								vendor/github.com/blang/semver/v4/json.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								vendor/github.com/blang/semver/v4/json.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					package semver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"encoding/json"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// MarshalJSON implements the encoding/json.Marshaler interface.
 | 
				
			||||||
 | 
					func (v Version) MarshalJSON() ([]byte, error) {
 | 
				
			||||||
 | 
						return json.Marshal(v.String())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UnmarshalJSON implements the encoding/json.Unmarshaler interface.
 | 
				
			||||||
 | 
					func (v *Version) UnmarshalJSON(data []byte) (err error) {
 | 
				
			||||||
 | 
						var versionString string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err = json.Unmarshal(data, &versionString); err != nil {
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						*v, err = Parse(versionString)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										416
									
								
								vendor/github.com/blang/semver/v4/range.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										416
									
								
								vendor/github.com/blang/semver/v4/range.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,416 @@
 | 
				
			|||||||
 | 
					package semver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"strconv"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
						"unicode"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type wildcardType int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						noneWildcard  wildcardType = iota
 | 
				
			||||||
 | 
						majorWildcard wildcardType = 1
 | 
				
			||||||
 | 
						minorWildcard wildcardType = 2
 | 
				
			||||||
 | 
						patchWildcard wildcardType = 3
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func wildcardTypefromInt(i int) wildcardType {
 | 
				
			||||||
 | 
						switch i {
 | 
				
			||||||
 | 
						case 1:
 | 
				
			||||||
 | 
							return majorWildcard
 | 
				
			||||||
 | 
						case 2:
 | 
				
			||||||
 | 
							return minorWildcard
 | 
				
			||||||
 | 
						case 3:
 | 
				
			||||||
 | 
							return patchWildcard
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							return noneWildcard
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type comparator func(Version, Version) bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						compEQ comparator = func(v1 Version, v2 Version) bool {
 | 
				
			||||||
 | 
							return v1.Compare(v2) == 0
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						compNE = func(v1 Version, v2 Version) bool {
 | 
				
			||||||
 | 
							return v1.Compare(v2) != 0
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						compGT = func(v1 Version, v2 Version) bool {
 | 
				
			||||||
 | 
							return v1.Compare(v2) == 1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						compGE = func(v1 Version, v2 Version) bool {
 | 
				
			||||||
 | 
							return v1.Compare(v2) >= 0
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						compLT = func(v1 Version, v2 Version) bool {
 | 
				
			||||||
 | 
							return v1.Compare(v2) == -1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						compLE = func(v1 Version, v2 Version) bool {
 | 
				
			||||||
 | 
							return v1.Compare(v2) <= 0
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type versionRange struct {
 | 
				
			||||||
 | 
						v Version
 | 
				
			||||||
 | 
						c comparator
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// rangeFunc creates a Range from the given versionRange.
 | 
				
			||||||
 | 
					func (vr *versionRange) rangeFunc() Range {
 | 
				
			||||||
 | 
						return Range(func(v Version) bool {
 | 
				
			||||||
 | 
							return vr.c(v, vr.v)
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Range represents a range of versions.
 | 
				
			||||||
 | 
					// A Range can be used to check if a Version satisfies it:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//     range, err := semver.ParseRange(">1.0.0 <2.0.0")
 | 
				
			||||||
 | 
					//     range(semver.MustParse("1.1.1") // returns true
 | 
				
			||||||
 | 
					type Range func(Version) bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// OR combines the existing Range with another Range using logical OR.
 | 
				
			||||||
 | 
					func (rf Range) OR(f Range) Range {
 | 
				
			||||||
 | 
						return Range(func(v Version) bool {
 | 
				
			||||||
 | 
							return rf(v) || f(v)
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// AND combines the existing Range with another Range using logical AND.
 | 
				
			||||||
 | 
					func (rf Range) AND(f Range) Range {
 | 
				
			||||||
 | 
						return Range(func(v Version) bool {
 | 
				
			||||||
 | 
							return rf(v) && f(v)
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ParseRange parses a range and returns a Range.
 | 
				
			||||||
 | 
					// If the range could not be parsed an error is returned.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Valid ranges are:
 | 
				
			||||||
 | 
					//   - "<1.0.0"
 | 
				
			||||||
 | 
					//   - "<=1.0.0"
 | 
				
			||||||
 | 
					//   - ">1.0.0"
 | 
				
			||||||
 | 
					//   - ">=1.0.0"
 | 
				
			||||||
 | 
					//   - "1.0.0", "=1.0.0", "==1.0.0"
 | 
				
			||||||
 | 
					//   - "!1.0.0", "!=1.0.0"
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// A Range can consist of multiple ranges separated by space:
 | 
				
			||||||
 | 
					// Ranges can be linked by logical AND:
 | 
				
			||||||
 | 
					//   - ">1.0.0 <2.0.0" would match between both ranges, so "1.1.1" and "1.8.7" but not "1.0.0" or "2.0.0"
 | 
				
			||||||
 | 
					//   - ">1.0.0 <3.0.0 !2.0.3-beta.2" would match every version between 1.0.0 and 3.0.0 except 2.0.3-beta.2
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Ranges can also be linked by logical OR:
 | 
				
			||||||
 | 
					//   - "<2.0.0 || >=3.0.0" would match "1.x.x" and "3.x.x" but not "2.x.x"
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// AND has a higher precedence than OR. It's not possible to use brackets.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Ranges can be combined by both AND and OR
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  - `>1.0.0 <2.0.0 || >3.0.0 !4.2.1` would match `1.2.3`, `1.9.9`, `3.1.1`, but not `4.2.1`, `2.1.1`
 | 
				
			||||||
 | 
					func ParseRange(s string) (Range, error) {
 | 
				
			||||||
 | 
						parts := splitAndTrim(s)
 | 
				
			||||||
 | 
						orParts, err := splitORParts(parts)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						expandedParts, err := expandWildcardVersion(orParts)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						var orFn Range
 | 
				
			||||||
 | 
						for _, p := range expandedParts {
 | 
				
			||||||
 | 
							var andFn Range
 | 
				
			||||||
 | 
							for _, ap := range p {
 | 
				
			||||||
 | 
								opStr, vStr, err := splitComparatorVersion(ap)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return nil, err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								vr, err := buildVersionRange(opStr, vStr)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return nil, fmt.Errorf("Could not parse Range %q: %s", ap, err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								rf := vr.rangeFunc()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Set function
 | 
				
			||||||
 | 
								if andFn == nil {
 | 
				
			||||||
 | 
									andFn = rf
 | 
				
			||||||
 | 
								} else { // Combine with existing function
 | 
				
			||||||
 | 
									andFn = andFn.AND(rf)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if orFn == nil {
 | 
				
			||||||
 | 
								orFn = andFn
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								orFn = orFn.OR(andFn)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return orFn, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// splitORParts splits the already cleaned parts by '||'.
 | 
				
			||||||
 | 
					// Checks for invalid positions of the operator and returns an
 | 
				
			||||||
 | 
					// error if found.
 | 
				
			||||||
 | 
					func splitORParts(parts []string) ([][]string, error) {
 | 
				
			||||||
 | 
						var ORparts [][]string
 | 
				
			||||||
 | 
						last := 0
 | 
				
			||||||
 | 
						for i, p := range parts {
 | 
				
			||||||
 | 
							if p == "||" {
 | 
				
			||||||
 | 
								if i == 0 {
 | 
				
			||||||
 | 
									return nil, fmt.Errorf("First element in range is '||'")
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								ORparts = append(ORparts, parts[last:i])
 | 
				
			||||||
 | 
								last = i + 1
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if last == len(parts) {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf("Last element in range is '||'")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						ORparts = append(ORparts, parts[last:])
 | 
				
			||||||
 | 
						return ORparts, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// buildVersionRange takes a slice of 2: operator and version
 | 
				
			||||||
 | 
					// and builds a versionRange, otherwise an error.
 | 
				
			||||||
 | 
					func buildVersionRange(opStr, vStr string) (*versionRange, error) {
 | 
				
			||||||
 | 
						c := parseComparator(opStr)
 | 
				
			||||||
 | 
						if c == nil {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf("Could not parse comparator %q in %q", opStr, strings.Join([]string{opStr, vStr}, ""))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						v, err := Parse(vStr)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, fmt.Errorf("Could not parse version %q in %q: %s", vStr, strings.Join([]string{opStr, vStr}, ""), err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &versionRange{
 | 
				
			||||||
 | 
							v: v,
 | 
				
			||||||
 | 
							c: c,
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// inArray checks if a byte is contained in an array of bytes
 | 
				
			||||||
 | 
					func inArray(s byte, list []byte) bool {
 | 
				
			||||||
 | 
						for _, el := range list {
 | 
				
			||||||
 | 
							if el == s {
 | 
				
			||||||
 | 
								return true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return false
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// splitAndTrim splits a range string by spaces and cleans whitespaces
 | 
				
			||||||
 | 
					func splitAndTrim(s string) (result []string) {
 | 
				
			||||||
 | 
						last := 0
 | 
				
			||||||
 | 
						var lastChar byte
 | 
				
			||||||
 | 
						excludeFromSplit := []byte{'>', '<', '='}
 | 
				
			||||||
 | 
						for i := 0; i < len(s); i++ {
 | 
				
			||||||
 | 
							if s[i] == ' ' && !inArray(lastChar, excludeFromSplit) {
 | 
				
			||||||
 | 
								if last < i-1 {
 | 
				
			||||||
 | 
									result = append(result, s[last:i])
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								last = i + 1
 | 
				
			||||||
 | 
							} else if s[i] != ' ' {
 | 
				
			||||||
 | 
								lastChar = s[i]
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if last < len(s)-1 {
 | 
				
			||||||
 | 
							result = append(result, s[last:])
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for i, v := range result {
 | 
				
			||||||
 | 
							result[i] = strings.Replace(v, " ", "", -1)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// parts := strings.Split(s, " ")
 | 
				
			||||||
 | 
						// for _, x := range parts {
 | 
				
			||||||
 | 
						// 	if s := strings.TrimSpace(x); len(s) != 0 {
 | 
				
			||||||
 | 
						// 		result = append(result, s)
 | 
				
			||||||
 | 
						// 	}
 | 
				
			||||||
 | 
						// }
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// splitComparatorVersion splits the comparator from the version.
 | 
				
			||||||
 | 
					// Input must be free of leading or trailing spaces.
 | 
				
			||||||
 | 
					func splitComparatorVersion(s string) (string, string, error) {
 | 
				
			||||||
 | 
						i := strings.IndexFunc(s, unicode.IsDigit)
 | 
				
			||||||
 | 
						if i == -1 {
 | 
				
			||||||
 | 
							return "", "", fmt.Errorf("Could not get version from string: %q", s)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return strings.TrimSpace(s[0:i]), s[i:], nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// getWildcardType will return the type of wildcard that the
 | 
				
			||||||
 | 
					// passed version contains
 | 
				
			||||||
 | 
					func getWildcardType(vStr string) wildcardType {
 | 
				
			||||||
 | 
						parts := strings.Split(vStr, ".")
 | 
				
			||||||
 | 
						nparts := len(parts)
 | 
				
			||||||
 | 
						wildcard := parts[nparts-1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						possibleWildcardType := wildcardTypefromInt(nparts)
 | 
				
			||||||
 | 
						if wildcard == "x" {
 | 
				
			||||||
 | 
							return possibleWildcardType
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return noneWildcard
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// createVersionFromWildcard will convert a wildcard version
 | 
				
			||||||
 | 
					// into a regular version, replacing 'x's with '0's, handling
 | 
				
			||||||
 | 
					// special cases like '1.x.x' and '1.x'
 | 
				
			||||||
 | 
					func createVersionFromWildcard(vStr string) string {
 | 
				
			||||||
 | 
						// handle 1.x.x
 | 
				
			||||||
 | 
						vStr2 := strings.Replace(vStr, ".x.x", ".x", 1)
 | 
				
			||||||
 | 
						vStr2 = strings.Replace(vStr2, ".x", ".0", 1)
 | 
				
			||||||
 | 
						parts := strings.Split(vStr2, ".")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// handle 1.x
 | 
				
			||||||
 | 
						if len(parts) == 2 {
 | 
				
			||||||
 | 
							return vStr2 + ".0"
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return vStr2
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// incrementMajorVersion will increment the major version
 | 
				
			||||||
 | 
					// of the passed version
 | 
				
			||||||
 | 
					func incrementMajorVersion(vStr string) (string, error) {
 | 
				
			||||||
 | 
						parts := strings.Split(vStr, ".")
 | 
				
			||||||
 | 
						i, err := strconv.Atoi(parts[0])
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return "", err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						parts[0] = strconv.Itoa(i + 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return strings.Join(parts, "."), nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// incrementMajorVersion will increment the minor version
 | 
				
			||||||
 | 
					// of the passed version
 | 
				
			||||||
 | 
					func incrementMinorVersion(vStr string) (string, error) {
 | 
				
			||||||
 | 
						parts := strings.Split(vStr, ".")
 | 
				
			||||||
 | 
						i, err := strconv.Atoi(parts[1])
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return "", err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						parts[1] = strconv.Itoa(i + 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return strings.Join(parts, "."), nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// expandWildcardVersion will expand wildcards inside versions
 | 
				
			||||||
 | 
					// following these rules:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// * when dealing with patch wildcards:
 | 
				
			||||||
 | 
					// >= 1.2.x    will become    >= 1.2.0
 | 
				
			||||||
 | 
					// <= 1.2.x    will become    <  1.3.0
 | 
				
			||||||
 | 
					// >  1.2.x    will become    >= 1.3.0
 | 
				
			||||||
 | 
					// <  1.2.x    will become    <  1.2.0
 | 
				
			||||||
 | 
					// != 1.2.x    will become    <  1.2.0 >= 1.3.0
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// * when dealing with minor wildcards:
 | 
				
			||||||
 | 
					// >= 1.x      will become    >= 1.0.0
 | 
				
			||||||
 | 
					// <= 1.x      will become    <  2.0.0
 | 
				
			||||||
 | 
					// >  1.x      will become    >= 2.0.0
 | 
				
			||||||
 | 
					// <  1.0      will become    <  1.0.0
 | 
				
			||||||
 | 
					// != 1.x      will become    <  1.0.0 >= 2.0.0
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// * when dealing with wildcards without
 | 
				
			||||||
 | 
					// version operator:
 | 
				
			||||||
 | 
					// 1.2.x       will become    >= 1.2.0 < 1.3.0
 | 
				
			||||||
 | 
					// 1.x         will become    >= 1.0.0 < 2.0.0
 | 
				
			||||||
 | 
					func expandWildcardVersion(parts [][]string) ([][]string, error) {
 | 
				
			||||||
 | 
						var expandedParts [][]string
 | 
				
			||||||
 | 
						for _, p := range parts {
 | 
				
			||||||
 | 
							var newParts []string
 | 
				
			||||||
 | 
							for _, ap := range p {
 | 
				
			||||||
 | 
								if strings.Contains(ap, "x") {
 | 
				
			||||||
 | 
									opStr, vStr, err := splitComparatorVersion(ap)
 | 
				
			||||||
 | 
									if err != nil {
 | 
				
			||||||
 | 
										return nil, err
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									versionWildcardType := getWildcardType(vStr)
 | 
				
			||||||
 | 
									flatVersion := createVersionFromWildcard(vStr)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									var resultOperator string
 | 
				
			||||||
 | 
									var shouldIncrementVersion bool
 | 
				
			||||||
 | 
									switch opStr {
 | 
				
			||||||
 | 
									case ">":
 | 
				
			||||||
 | 
										resultOperator = ">="
 | 
				
			||||||
 | 
										shouldIncrementVersion = true
 | 
				
			||||||
 | 
									case ">=":
 | 
				
			||||||
 | 
										resultOperator = ">="
 | 
				
			||||||
 | 
									case "<":
 | 
				
			||||||
 | 
										resultOperator = "<"
 | 
				
			||||||
 | 
									case "<=":
 | 
				
			||||||
 | 
										resultOperator = "<"
 | 
				
			||||||
 | 
										shouldIncrementVersion = true
 | 
				
			||||||
 | 
									case "", "=", "==":
 | 
				
			||||||
 | 
										newParts = append(newParts, ">="+flatVersion)
 | 
				
			||||||
 | 
										resultOperator = "<"
 | 
				
			||||||
 | 
										shouldIncrementVersion = true
 | 
				
			||||||
 | 
									case "!=", "!":
 | 
				
			||||||
 | 
										newParts = append(newParts, "<"+flatVersion)
 | 
				
			||||||
 | 
										resultOperator = ">="
 | 
				
			||||||
 | 
										shouldIncrementVersion = true
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									var resultVersion string
 | 
				
			||||||
 | 
									if shouldIncrementVersion {
 | 
				
			||||||
 | 
										switch versionWildcardType {
 | 
				
			||||||
 | 
										case patchWildcard:
 | 
				
			||||||
 | 
											resultVersion, _ = incrementMinorVersion(flatVersion)
 | 
				
			||||||
 | 
										case minorWildcard:
 | 
				
			||||||
 | 
											resultVersion, _ = incrementMajorVersion(flatVersion)
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										resultVersion = flatVersion
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									ap = resultOperator + resultVersion
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								newParts = append(newParts, ap)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							expandedParts = append(expandedParts, newParts)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return expandedParts, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func parseComparator(s string) comparator {
 | 
				
			||||||
 | 
						switch s {
 | 
				
			||||||
 | 
						case "==":
 | 
				
			||||||
 | 
							fallthrough
 | 
				
			||||||
 | 
						case "":
 | 
				
			||||||
 | 
							fallthrough
 | 
				
			||||||
 | 
						case "=":
 | 
				
			||||||
 | 
							return compEQ
 | 
				
			||||||
 | 
						case ">":
 | 
				
			||||||
 | 
							return compGT
 | 
				
			||||||
 | 
						case ">=":
 | 
				
			||||||
 | 
							return compGE
 | 
				
			||||||
 | 
						case "<":
 | 
				
			||||||
 | 
							return compLT
 | 
				
			||||||
 | 
						case "<=":
 | 
				
			||||||
 | 
							return compLE
 | 
				
			||||||
 | 
						case "!":
 | 
				
			||||||
 | 
							fallthrough
 | 
				
			||||||
 | 
						case "!=":
 | 
				
			||||||
 | 
							return compNE
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// MustParseRange is like ParseRange but panics if the range cannot be parsed.
 | 
				
			||||||
 | 
					func MustParseRange(s string) Range {
 | 
				
			||||||
 | 
						r, err := ParseRange(s)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(`semver: ParseRange(` + s + `): ` + err.Error())
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return r
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										476
									
								
								vendor/github.com/blang/semver/v4/semver.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										476
									
								
								vendor/github.com/blang/semver/v4/semver.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,476 @@
 | 
				
			|||||||
 | 
					package semver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"strconv"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						numbers  string = "0123456789"
 | 
				
			||||||
 | 
						alphas          = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-"
 | 
				
			||||||
 | 
						alphanum        = alphas + numbers
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SpecVersion is the latest fully supported spec version of semver
 | 
				
			||||||
 | 
					var SpecVersion = Version{
 | 
				
			||||||
 | 
						Major: 2,
 | 
				
			||||||
 | 
						Minor: 0,
 | 
				
			||||||
 | 
						Patch: 0,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Version represents a semver compatible version
 | 
				
			||||||
 | 
					type Version struct {
 | 
				
			||||||
 | 
						Major uint64
 | 
				
			||||||
 | 
						Minor uint64
 | 
				
			||||||
 | 
						Patch uint64
 | 
				
			||||||
 | 
						Pre   []PRVersion
 | 
				
			||||||
 | 
						Build []string //No Precedence
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Version to string
 | 
				
			||||||
 | 
					func (v Version) String() string {
 | 
				
			||||||
 | 
						b := make([]byte, 0, 5)
 | 
				
			||||||
 | 
						b = strconv.AppendUint(b, v.Major, 10)
 | 
				
			||||||
 | 
						b = append(b, '.')
 | 
				
			||||||
 | 
						b = strconv.AppendUint(b, v.Minor, 10)
 | 
				
			||||||
 | 
						b = append(b, '.')
 | 
				
			||||||
 | 
						b = strconv.AppendUint(b, v.Patch, 10)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if len(v.Pre) > 0 {
 | 
				
			||||||
 | 
							b = append(b, '-')
 | 
				
			||||||
 | 
							b = append(b, v.Pre[0].String()...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for _, pre := range v.Pre[1:] {
 | 
				
			||||||
 | 
								b = append(b, '.')
 | 
				
			||||||
 | 
								b = append(b, pre.String()...)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if len(v.Build) > 0 {
 | 
				
			||||||
 | 
							b = append(b, '+')
 | 
				
			||||||
 | 
							b = append(b, v.Build[0]...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for _, build := range v.Build[1:] {
 | 
				
			||||||
 | 
								b = append(b, '.')
 | 
				
			||||||
 | 
								b = append(b, build...)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return string(b)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// FinalizeVersion discards prerelease and build number and only returns
 | 
				
			||||||
 | 
					// major, minor and patch number.
 | 
				
			||||||
 | 
					func (v Version) FinalizeVersion() string {
 | 
				
			||||||
 | 
						b := make([]byte, 0, 5)
 | 
				
			||||||
 | 
						b = strconv.AppendUint(b, v.Major, 10)
 | 
				
			||||||
 | 
						b = append(b, '.')
 | 
				
			||||||
 | 
						b = strconv.AppendUint(b, v.Minor, 10)
 | 
				
			||||||
 | 
						b = append(b, '.')
 | 
				
			||||||
 | 
						b = strconv.AppendUint(b, v.Patch, 10)
 | 
				
			||||||
 | 
						return string(b)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Equals checks if v is equal to o.
 | 
				
			||||||
 | 
					func (v Version) Equals(o Version) bool {
 | 
				
			||||||
 | 
						return (v.Compare(o) == 0)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// EQ checks if v is equal to o.
 | 
				
			||||||
 | 
					func (v Version) EQ(o Version) bool {
 | 
				
			||||||
 | 
						return (v.Compare(o) == 0)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NE checks if v is not equal to o.
 | 
				
			||||||
 | 
					func (v Version) NE(o Version) bool {
 | 
				
			||||||
 | 
						return (v.Compare(o) != 0)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// GT checks if v is greater than o.
 | 
				
			||||||
 | 
					func (v Version) GT(o Version) bool {
 | 
				
			||||||
 | 
						return (v.Compare(o) == 1)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// GTE checks if v is greater than or equal to o.
 | 
				
			||||||
 | 
					func (v Version) GTE(o Version) bool {
 | 
				
			||||||
 | 
						return (v.Compare(o) >= 0)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// GE checks if v is greater than or equal to o.
 | 
				
			||||||
 | 
					func (v Version) GE(o Version) bool {
 | 
				
			||||||
 | 
						return (v.Compare(o) >= 0)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// LT checks if v is less than o.
 | 
				
			||||||
 | 
					func (v Version) LT(o Version) bool {
 | 
				
			||||||
 | 
						return (v.Compare(o) == -1)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// LTE checks if v is less than or equal to o.
 | 
				
			||||||
 | 
					func (v Version) LTE(o Version) bool {
 | 
				
			||||||
 | 
						return (v.Compare(o) <= 0)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// LE checks if v is less than or equal to o.
 | 
				
			||||||
 | 
					func (v Version) LE(o Version) bool {
 | 
				
			||||||
 | 
						return (v.Compare(o) <= 0)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Compare compares Versions v to o:
 | 
				
			||||||
 | 
					// -1 == v is less than o
 | 
				
			||||||
 | 
					// 0 == v is equal to o
 | 
				
			||||||
 | 
					// 1 == v is greater than o
 | 
				
			||||||
 | 
					func (v Version) Compare(o Version) int {
 | 
				
			||||||
 | 
						if v.Major != o.Major {
 | 
				
			||||||
 | 
							if v.Major > o.Major {
 | 
				
			||||||
 | 
								return 1
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return -1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if v.Minor != o.Minor {
 | 
				
			||||||
 | 
							if v.Minor > o.Minor {
 | 
				
			||||||
 | 
								return 1
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return -1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if v.Patch != o.Patch {
 | 
				
			||||||
 | 
							if v.Patch > o.Patch {
 | 
				
			||||||
 | 
								return 1
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return -1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Quick comparison if a version has no prerelease versions
 | 
				
			||||||
 | 
						if len(v.Pre) == 0 && len(o.Pre) == 0 {
 | 
				
			||||||
 | 
							return 0
 | 
				
			||||||
 | 
						} else if len(v.Pre) == 0 && len(o.Pre) > 0 {
 | 
				
			||||||
 | 
							return 1
 | 
				
			||||||
 | 
						} else if len(v.Pre) > 0 && len(o.Pre) == 0 {
 | 
				
			||||||
 | 
							return -1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						i := 0
 | 
				
			||||||
 | 
						for ; i < len(v.Pre) && i < len(o.Pre); i++ {
 | 
				
			||||||
 | 
							if comp := v.Pre[i].Compare(o.Pre[i]); comp == 0 {
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							} else if comp == 1 {
 | 
				
			||||||
 | 
								return 1
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								return -1
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// If all pr versions are the equal but one has further prversion, this one greater
 | 
				
			||||||
 | 
						if i == len(v.Pre) && i == len(o.Pre) {
 | 
				
			||||||
 | 
							return 0
 | 
				
			||||||
 | 
						} else if i == len(v.Pre) && i < len(o.Pre) {
 | 
				
			||||||
 | 
							return -1
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							return 1
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IncrementPatch increments the patch version
 | 
				
			||||||
 | 
					func (v *Version) IncrementPatch() error {
 | 
				
			||||||
 | 
						v.Patch++
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IncrementMinor increments the minor version
 | 
				
			||||||
 | 
					func (v *Version) IncrementMinor() error {
 | 
				
			||||||
 | 
						v.Minor++
 | 
				
			||||||
 | 
						v.Patch = 0
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IncrementMajor increments the major version
 | 
				
			||||||
 | 
					func (v *Version) IncrementMajor() error {
 | 
				
			||||||
 | 
						v.Major++
 | 
				
			||||||
 | 
						v.Minor = 0
 | 
				
			||||||
 | 
						v.Patch = 0
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Validate validates v and returns error in case
 | 
				
			||||||
 | 
					func (v Version) Validate() error {
 | 
				
			||||||
 | 
						// Major, Minor, Patch already validated using uint64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, pre := range v.Pre {
 | 
				
			||||||
 | 
							if !pre.IsNum { //Numeric prerelease versions already uint64
 | 
				
			||||||
 | 
								if len(pre.VersionStr) == 0 {
 | 
				
			||||||
 | 
									return fmt.Errorf("Prerelease can not be empty %q", pre.VersionStr)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if !containsOnly(pre.VersionStr, alphanum) {
 | 
				
			||||||
 | 
									return fmt.Errorf("Invalid character(s) found in prerelease %q", pre.VersionStr)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, build := range v.Build {
 | 
				
			||||||
 | 
							if len(build) == 0 {
 | 
				
			||||||
 | 
								return fmt.Errorf("Build meta data can not be empty %q", build)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if !containsOnly(build, alphanum) {
 | 
				
			||||||
 | 
								return fmt.Errorf("Invalid character(s) found in build meta data %q", build)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// New is an alias for Parse and returns a pointer, parses version string and returns a validated Version or error
 | 
				
			||||||
 | 
					func New(s string) (*Version, error) {
 | 
				
			||||||
 | 
						v, err := Parse(s)
 | 
				
			||||||
 | 
						vp := &v
 | 
				
			||||||
 | 
						return vp, err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Make is an alias for Parse, parses version string and returns a validated Version or error
 | 
				
			||||||
 | 
					func Make(s string) (Version, error) {
 | 
				
			||||||
 | 
						return Parse(s)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ParseTolerant allows for certain version specifications that do not strictly adhere to semver
 | 
				
			||||||
 | 
					// specs to be parsed by this library. It does so by normalizing versions before passing them to
 | 
				
			||||||
 | 
					// Parse(). It currently trims spaces, removes a "v" prefix, adds a 0 patch number to versions
 | 
				
			||||||
 | 
					// with only major and minor components specified, and removes leading 0s.
 | 
				
			||||||
 | 
					func ParseTolerant(s string) (Version, error) {
 | 
				
			||||||
 | 
						s = strings.TrimSpace(s)
 | 
				
			||||||
 | 
						s = strings.TrimPrefix(s, "v")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Split into major.minor.(patch+pr+meta)
 | 
				
			||||||
 | 
						parts := strings.SplitN(s, ".", 3)
 | 
				
			||||||
 | 
						// Remove leading zeros.
 | 
				
			||||||
 | 
						for i, p := range parts {
 | 
				
			||||||
 | 
							if len(p) > 1 {
 | 
				
			||||||
 | 
								p = strings.TrimLeft(p, "0")
 | 
				
			||||||
 | 
								if len(p) == 0 || !strings.ContainsAny(p[0:1], "0123456789") {
 | 
				
			||||||
 | 
									p = "0" + p
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								parts[i] = p
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// Fill up shortened versions.
 | 
				
			||||||
 | 
						if len(parts) < 3 {
 | 
				
			||||||
 | 
							if strings.ContainsAny(parts[len(parts)-1], "+-") {
 | 
				
			||||||
 | 
								return Version{}, errors.New("Short version cannot contain PreRelease/Build meta data")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							for len(parts) < 3 {
 | 
				
			||||||
 | 
								parts = append(parts, "0")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						s = strings.Join(parts, ".")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return Parse(s)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Parse parses version string and returns a validated Version or error
 | 
				
			||||||
 | 
					func Parse(s string) (Version, error) {
 | 
				
			||||||
 | 
						if len(s) == 0 {
 | 
				
			||||||
 | 
							return Version{}, errors.New("Version string empty")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Split into major.minor.(patch+pr+meta)
 | 
				
			||||||
 | 
						parts := strings.SplitN(s, ".", 3)
 | 
				
			||||||
 | 
						if len(parts) != 3 {
 | 
				
			||||||
 | 
							return Version{}, errors.New("No Major.Minor.Patch elements found")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Major
 | 
				
			||||||
 | 
						if !containsOnly(parts[0], numbers) {
 | 
				
			||||||
 | 
							return Version{}, fmt.Errorf("Invalid character(s) found in major number %q", parts[0])
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if hasLeadingZeroes(parts[0]) {
 | 
				
			||||||
 | 
							return Version{}, fmt.Errorf("Major number must not contain leading zeroes %q", parts[0])
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						major, err := strconv.ParseUint(parts[0], 10, 64)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return Version{}, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Minor
 | 
				
			||||||
 | 
						if !containsOnly(parts[1], numbers) {
 | 
				
			||||||
 | 
							return Version{}, fmt.Errorf("Invalid character(s) found in minor number %q", parts[1])
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if hasLeadingZeroes(parts[1]) {
 | 
				
			||||||
 | 
							return Version{}, fmt.Errorf("Minor number must not contain leading zeroes %q", parts[1])
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						minor, err := strconv.ParseUint(parts[1], 10, 64)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return Version{}, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						v := Version{}
 | 
				
			||||||
 | 
						v.Major = major
 | 
				
			||||||
 | 
						v.Minor = minor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var build, prerelease []string
 | 
				
			||||||
 | 
						patchStr := parts[2]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if buildIndex := strings.IndexRune(patchStr, '+'); buildIndex != -1 {
 | 
				
			||||||
 | 
							build = strings.Split(patchStr[buildIndex+1:], ".")
 | 
				
			||||||
 | 
							patchStr = patchStr[:buildIndex]
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if preIndex := strings.IndexRune(patchStr, '-'); preIndex != -1 {
 | 
				
			||||||
 | 
							prerelease = strings.Split(patchStr[preIndex+1:], ".")
 | 
				
			||||||
 | 
							patchStr = patchStr[:preIndex]
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if !containsOnly(patchStr, numbers) {
 | 
				
			||||||
 | 
							return Version{}, fmt.Errorf("Invalid character(s) found in patch number %q", patchStr)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if hasLeadingZeroes(patchStr) {
 | 
				
			||||||
 | 
							return Version{}, fmt.Errorf("Patch number must not contain leading zeroes %q", patchStr)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						patch, err := strconv.ParseUint(patchStr, 10, 64)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return Version{}, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						v.Patch = patch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Prerelease
 | 
				
			||||||
 | 
						for _, prstr := range prerelease {
 | 
				
			||||||
 | 
							parsedPR, err := NewPRVersion(prstr)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return Version{}, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							v.Pre = append(v.Pre, parsedPR)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Build meta data
 | 
				
			||||||
 | 
						for _, str := range build {
 | 
				
			||||||
 | 
							if len(str) == 0 {
 | 
				
			||||||
 | 
								return Version{}, errors.New("Build meta data is empty")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if !containsOnly(str, alphanum) {
 | 
				
			||||||
 | 
								return Version{}, fmt.Errorf("Invalid character(s) found in build meta data %q", str)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							v.Build = append(v.Build, str)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return v, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// MustParse is like Parse but panics if the version cannot be parsed.
 | 
				
			||||||
 | 
					func MustParse(s string) Version {
 | 
				
			||||||
 | 
						v, err := Parse(s)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							panic(`semver: Parse(` + s + `): ` + err.Error())
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return v
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// PRVersion represents a PreRelease Version
 | 
				
			||||||
 | 
					type PRVersion struct {
 | 
				
			||||||
 | 
						VersionStr string
 | 
				
			||||||
 | 
						VersionNum uint64
 | 
				
			||||||
 | 
						IsNum      bool
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewPRVersion creates a new valid prerelease version
 | 
				
			||||||
 | 
					func NewPRVersion(s string) (PRVersion, error) {
 | 
				
			||||||
 | 
						if len(s) == 0 {
 | 
				
			||||||
 | 
							return PRVersion{}, errors.New("Prerelease is empty")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						v := PRVersion{}
 | 
				
			||||||
 | 
						if containsOnly(s, numbers) {
 | 
				
			||||||
 | 
							if hasLeadingZeroes(s) {
 | 
				
			||||||
 | 
								return PRVersion{}, fmt.Errorf("Numeric PreRelease version must not contain leading zeroes %q", s)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							num, err := strconv.ParseUint(s, 10, 64)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Might never be hit, but just in case
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return PRVersion{}, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							v.VersionNum = num
 | 
				
			||||||
 | 
							v.IsNum = true
 | 
				
			||||||
 | 
						} else if containsOnly(s, alphanum) {
 | 
				
			||||||
 | 
							v.VersionStr = s
 | 
				
			||||||
 | 
							v.IsNum = false
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							return PRVersion{}, fmt.Errorf("Invalid character(s) found in prerelease %q", s)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return v, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsNumeric checks if prerelease-version is numeric
 | 
				
			||||||
 | 
					func (v PRVersion) IsNumeric() bool {
 | 
				
			||||||
 | 
						return v.IsNum
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Compare compares two PreRelease Versions v and o:
 | 
				
			||||||
 | 
					// -1 == v is less than o
 | 
				
			||||||
 | 
					// 0 == v is equal to o
 | 
				
			||||||
 | 
					// 1 == v is greater than o
 | 
				
			||||||
 | 
					func (v PRVersion) Compare(o PRVersion) int {
 | 
				
			||||||
 | 
						if v.IsNum && !o.IsNum {
 | 
				
			||||||
 | 
							return -1
 | 
				
			||||||
 | 
						} else if !v.IsNum && o.IsNum {
 | 
				
			||||||
 | 
							return 1
 | 
				
			||||||
 | 
						} else if v.IsNum && o.IsNum {
 | 
				
			||||||
 | 
							if v.VersionNum == o.VersionNum {
 | 
				
			||||||
 | 
								return 0
 | 
				
			||||||
 | 
							} else if v.VersionNum > o.VersionNum {
 | 
				
			||||||
 | 
								return 1
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								return -1
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} else { // both are Alphas
 | 
				
			||||||
 | 
							if v.VersionStr == o.VersionStr {
 | 
				
			||||||
 | 
								return 0
 | 
				
			||||||
 | 
							} else if v.VersionStr > o.VersionStr {
 | 
				
			||||||
 | 
								return 1
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								return -1
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// PreRelease version to string
 | 
				
			||||||
 | 
					func (v PRVersion) String() string {
 | 
				
			||||||
 | 
						if v.IsNum {
 | 
				
			||||||
 | 
							return strconv.FormatUint(v.VersionNum, 10)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return v.VersionStr
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func containsOnly(s string, set string) bool {
 | 
				
			||||||
 | 
						return strings.IndexFunc(s, func(r rune) bool {
 | 
				
			||||||
 | 
							return !strings.ContainsRune(set, r)
 | 
				
			||||||
 | 
						}) == -1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func hasLeadingZeroes(s string) bool {
 | 
				
			||||||
 | 
						return len(s) > 1 && s[0] == '0'
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewBuildVersion creates a new valid build version
 | 
				
			||||||
 | 
					func NewBuildVersion(s string) (string, error) {
 | 
				
			||||||
 | 
						if len(s) == 0 {
 | 
				
			||||||
 | 
							return "", errors.New("Buildversion is empty")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !containsOnly(s, alphanum) {
 | 
				
			||||||
 | 
							return "", fmt.Errorf("Invalid character(s) found in build meta data %q", s)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return s, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// FinalizeVersion returns the major, minor and patch number only and discards
 | 
				
			||||||
 | 
					// prerelease and build number.
 | 
				
			||||||
 | 
					func FinalizeVersion(s string) (string, error) {
 | 
				
			||||||
 | 
						v, err := Parse(s)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return "", err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						v.Pre = nil
 | 
				
			||||||
 | 
						v.Build = nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						finalVer := v.String()
 | 
				
			||||||
 | 
						return finalVer, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										28
									
								
								vendor/github.com/blang/semver/v4/sort.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								vendor/github.com/blang/semver/v4/sort.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					package semver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"sort"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Versions represents multiple versions.
 | 
				
			||||||
 | 
					type Versions []Version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Len returns length of version collection
 | 
				
			||||||
 | 
					func (s Versions) Len() int {
 | 
				
			||||||
 | 
						return len(s)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Swap swaps two versions inside the collection by its indices
 | 
				
			||||||
 | 
					func (s Versions) Swap(i, j int) {
 | 
				
			||||||
 | 
						s[i], s[j] = s[j], s[i]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Less checks if version at index i is less than version at index j
 | 
				
			||||||
 | 
					func (s Versions) Less(i, j int) bool {
 | 
				
			||||||
 | 
						return s[i].LT(s[j])
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Sort sorts a slice of versions
 | 
				
			||||||
 | 
					func Sort(versions []Version) {
 | 
				
			||||||
 | 
						sort.Sort(Versions(versions))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										30
									
								
								vendor/github.com/blang/semver/v4/sql.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/github.com/blang/semver/v4/sql.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					package semver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"database/sql/driver"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Scan implements the database/sql.Scanner interface.
 | 
				
			||||||
 | 
					func (v *Version) Scan(src interface{}) (err error) {
 | 
				
			||||||
 | 
						var str string
 | 
				
			||||||
 | 
						switch src := src.(type) {
 | 
				
			||||||
 | 
						case string:
 | 
				
			||||||
 | 
							str = src
 | 
				
			||||||
 | 
						case []byte:
 | 
				
			||||||
 | 
							str = string(src)
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							return fmt.Errorf("version.Scan: cannot convert %T to string", src)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if t, err := Parse(str); err == nil {
 | 
				
			||||||
 | 
							*v = t
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Value implements the database/sql/driver.Valuer interface.
 | 
				
			||||||
 | 
					func (v Version) Value() (driver.Value, error) {
 | 
				
			||||||
 | 
						return v.String(), nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										1
									
								
								vendor/k8s.io/system-validators/validators/cgroup_validator_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/k8s.io/system-validators/validators/cgroup_validator_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					//go:build linux
 | 
				
			||||||
// +build linux
 | 
					// +build linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								vendor/k8s.io/system-validators/validators/cgroup_validator_other.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/k8s.io/system-validators/validators/cgroup_validator_other.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					//go:build !linux
 | 
				
			||||||
// +build !linux
 | 
					// +build !linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/k8s.io/system-validators/validators/package_validator_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/k8s.io/system-validators/validators/package_validator_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					//go:build linux
 | 
				
			||||||
// +build linux
 | 
					// +build linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
@@ -24,7 +25,7 @@ import (
 | 
				
			|||||||
	"os/exec"
 | 
						"os/exec"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/blang/semver"
 | 
						"github.com/blang/semver/v4"
 | 
				
			||||||
	"github.com/pkg/errors"
 | 
						"github.com/pkg/errors"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								vendor/k8s.io/system-validators/validators/package_validator_other.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/k8s.io/system-validators/validators/package_validator_other.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					//go:build !linux
 | 
				
			||||||
// +build !linux
 | 
					// +build !linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								vendor/k8s.io/system-validators/validators/types_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/k8s.io/system-validators/validators/types_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					//go:build !windows
 | 
				
			||||||
// +build !windows
 | 
					// +build !windows
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
@@ -67,9 +68,12 @@ var DefaultSysSpec = SysSpec{
 | 
				
			|||||||
		// The hugetlb cgroup is optional since some kernels are compiled without support for huge pages
 | 
							// The hugetlb cgroup is optional since some kernels are compiled without support for huge pages
 | 
				
			||||||
		// and therefore lacks corresponding hugetlb cgroup
 | 
							// and therefore lacks corresponding hugetlb cgroup
 | 
				
			||||||
		"hugetlb",
 | 
							"hugetlb",
 | 
				
			||||||
 | 
							// The blkio cgroup is optional since some kernels are compiled without support for block I/O throttling.
 | 
				
			||||||
 | 
							// Containerd and cri-o will use blkio to track disk I/O and throttling in both cgroup v1 and v2.
 | 
				
			||||||
 | 
							"blkio",
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	CgroupsV2:         []string{"cpu", "cpuset", "devices", "freezer", "memory", "pids"},
 | 
						CgroupsV2:         []string{"cpu", "cpuset", "devices", "freezer", "memory", "pids"},
 | 
				
			||||||
	CgroupsV2Optional: []string{"hugetlb"},
 | 
						CgroupsV2Optional: []string{"hugetlb", "blkio"},
 | 
				
			||||||
	RuntimeSpec: RuntimeSpec{
 | 
						RuntimeSpec: RuntimeSpec{
 | 
				
			||||||
		DockerSpec: &DockerSpec{
 | 
							DockerSpec: &DockerSpec{
 | 
				
			||||||
			Version:     []string{`1\.1[1-3]\..*`, `17\.0[3,6,9]\..*`, `18\.0[6,9]\..*`, `19\.03\..*`, `20\.10\..*`},
 | 
								Version:     []string{`1\.1[1-3]\..*`, `17\.0[3,6,9]\..*`, `18\.0[6,9]\..*`, `19\.03\..*`, `20\.10\..*`},
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								vendor/k8s.io/system-validators/validators/types_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/k8s.io/system-validators/validators/types_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					//go:build windows
 | 
				
			||||||
// +build windows
 | 
					// +build windows
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							@@ -155,6 +155,8 @@ github.com/bits-and-blooms/bitset
 | 
				
			|||||||
# github.com/blang/semver v3.5.1+incompatible => github.com/blang/semver v3.5.1+incompatible
 | 
					# github.com/blang/semver v3.5.1+incompatible => github.com/blang/semver v3.5.1+incompatible
 | 
				
			||||||
## explicit
 | 
					## explicit
 | 
				
			||||||
github.com/blang/semver
 | 
					github.com/blang/semver
 | 
				
			||||||
 | 
					# github.com/blang/semver/v4 v4.0.0 => github.com/blang/semver/v4 v4.0.0
 | 
				
			||||||
 | 
					github.com/blang/semver/v4
 | 
				
			||||||
# github.com/boltdb/bolt v1.3.1 => github.com/boltdb/bolt v1.3.1
 | 
					# github.com/boltdb/bolt v1.3.1 => github.com/boltdb/bolt v1.3.1
 | 
				
			||||||
## explicit
 | 
					## explicit
 | 
				
			||||||
# github.com/cespare/xxhash/v2 v2.1.2 => github.com/cespare/xxhash/v2 v2.1.2
 | 
					# github.com/cespare/xxhash/v2 v2.1.2 => github.com/cespare/xxhash/v2 v2.1.2
 | 
				
			||||||
@@ -2293,7 +2295,7 @@ k8s.io/sample-apiserver/pkg/generated/openapi
 | 
				
			|||||||
k8s.io/sample-apiserver/pkg/registry
 | 
					k8s.io/sample-apiserver/pkg/registry
 | 
				
			||||||
k8s.io/sample-apiserver/pkg/registry/wardle/fischer
 | 
					k8s.io/sample-apiserver/pkg/registry/wardle/fischer
 | 
				
			||||||
k8s.io/sample-apiserver/pkg/registry/wardle/flunder
 | 
					k8s.io/sample-apiserver/pkg/registry/wardle/flunder
 | 
				
			||||||
# k8s.io/system-validators v1.6.0 => k8s.io/system-validators v1.6.0
 | 
					# k8s.io/system-validators v1.7.0 => k8s.io/system-validators v1.7.0
 | 
				
			||||||
## explicit
 | 
					## explicit
 | 
				
			||||||
k8s.io/system-validators/validators
 | 
					k8s.io/system-validators/validators
 | 
				
			||||||
# k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 => k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
 | 
					# k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 => k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
 | 
				
			||||||
@@ -2454,6 +2456,7 @@ sigs.k8s.io/yaml
 | 
				
			|||||||
# github.com/beorn7/perks => github.com/beorn7/perks v1.0.1
 | 
					# github.com/beorn7/perks => github.com/beorn7/perks v1.0.1
 | 
				
			||||||
# github.com/bits-and-blooms/bitset => github.com/bits-and-blooms/bitset v1.2.0
 | 
					# github.com/bits-and-blooms/bitset => github.com/bits-and-blooms/bitset v1.2.0
 | 
				
			||||||
# github.com/blang/semver => github.com/blang/semver v3.5.1+incompatible
 | 
					# github.com/blang/semver => github.com/blang/semver v3.5.1+incompatible
 | 
				
			||||||
 | 
					# github.com/blang/semver/v4 => github.com/blang/semver/v4 v4.0.0
 | 
				
			||||||
# github.com/boltdb/bolt => github.com/boltdb/bolt v1.3.1
 | 
					# github.com/boltdb/bolt => github.com/boltdb/bolt v1.3.1
 | 
				
			||||||
# github.com/census-instrumentation/opencensus-proto => github.com/census-instrumentation/opencensus-proto v0.2.1
 | 
					# github.com/census-instrumentation/opencensus-proto => github.com/census-instrumentation/opencensus-proto v0.2.1
 | 
				
			||||||
# github.com/certifi/gocertifi => github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054
 | 
					# github.com/certifi/gocertifi => github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054
 | 
				
			||||||
@@ -2748,7 +2751,7 @@ sigs.k8s.io/yaml
 | 
				
			|||||||
# k8s.io/sample-apiserver => ./staging/src/k8s.io/sample-apiserver
 | 
					# k8s.io/sample-apiserver => ./staging/src/k8s.io/sample-apiserver
 | 
				
			||||||
# k8s.io/sample-cli-plugin => ./staging/src/k8s.io/sample-cli-plugin
 | 
					# k8s.io/sample-cli-plugin => ./staging/src/k8s.io/sample-cli-plugin
 | 
				
			||||||
# k8s.io/sample-controller => ./staging/src/k8s.io/sample-controller
 | 
					# k8s.io/sample-controller => ./staging/src/k8s.io/sample-controller
 | 
				
			||||||
# k8s.io/system-validators => k8s.io/system-validators v1.6.0
 | 
					# k8s.io/system-validators => k8s.io/system-validators v1.7.0
 | 
				
			||||||
# k8s.io/utils => k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
 | 
					# k8s.io/utils => k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
 | 
				
			||||||
# modernc.org/cc => modernc.org/cc v1.0.0
 | 
					# modernc.org/cc => modernc.org/cc v1.0.0
 | 
				
			||||||
# modernc.org/golex => modernc.org/golex v1.0.0
 | 
					# modernc.org/golex => modernc.org/golex v1.0.0
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user