/
version.go
149 lines (125 loc) · 3.13 KB
/
version.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package common
import (
"errors"
"fmt"
"strconv"
"strings"
)
var ErrInvalidVersion = errors.New("invalid eventing version")
// missing default is filled by the index 0
var LanguageCompatibility = []string{"7.2.0", "6.6.2", "6.0.0", "6.5.0"}
type CouchbaseVer struct {
major int
minor int
mpVersion int
build int
isEnterprise bool
}
var CouchbaseVerMap = map[string]CouchbaseVer{
"vulcan": CouchbaseVer{major: 5,
minor: 5,
mpVersion: 0,
build: 0,
isEnterprise: true},
"alice": CouchbaseVer{
major: 6,
minor: 0,
mpVersion: 0,
build: 0,
isEnterprise: true},
"mad-hatter": CouchbaseVer{major: 6,
minor: 5,
mpVersion: 0,
build: 0,
isEnterprise: true},
"cheshire-cat": CouchbaseVer{major: 7,
minor: 0,
mpVersion: 0,
build: 0,
isEnterprise: true},
"6.6.2": CouchbaseVer{major: 6,
minor: 6,
mpVersion: 2,
build: 0,
isEnterprise: true},
}
// returns e >= need
func (e CouchbaseVer) Compare(need CouchbaseVer) bool {
return (e.major > need.major ||
e.major == need.major && e.minor > need.minor ||
e.major == need.major && e.minor == need.minor && e.mpVersion >= need.mpVersion) &&
(e.isEnterprise == need.isEnterprise)
}
// returns e == need
func (e CouchbaseVer) Equals(need CouchbaseVer) bool {
return e.major == need.major && e.minor == need.minor && e.mpVersion == need.mpVersion && e.isEnterprise == need.isEnterprise
}
func (e CouchbaseVer) String() string {
return fmt.Sprintf("%d.%d", e.major, e.minor)
}
// for short hand version like x.x.x
func FrameCouchbaseVersionShort(ver string) (CouchbaseVer, error) {
var eVer CouchbaseVer
verSegs := strings.Split(ver, ".")
if len(verSegs) != 3 {
return eVer, ErrInvalidVersion
}
val, err := strconv.Atoi(verSegs[0])
if err != nil {
return eVer, ErrInvalidVersion
}
eVer.major = val
val, err = strconv.Atoi(verSegs[1])
if err != nil {
return eVer, ErrInvalidVersion
}
eVer.minor = val
val, err = strconv.Atoi(verSegs[2])
if err != nil {
return eVer, ErrInvalidVersion
}
eVer.mpVersion = val
eVer.isEnterprise = true
return eVer, nil
}
func FrameCouchbaseVersion(ver string) (CouchbaseVer, error) {
segs := strings.Split(ver, "-")
if len(segs) < 4 {
return CouchbaseVer{}, ErrInvalidVersion
}
eVer, err := FrameCouchbaseVersionShort(segs[1])
if err != nil {
return eVer, err
}
val, err := strconv.Atoi(segs[2])
if err != nil {
return eVer, ErrInvalidVersion
}
eVer.build = val
eVer.isEnterprise = false
if segs[len(segs)-1] == "ee" {
eVer.isEnterprise = true
}
return eVer, nil
}
// major.minor.mpVersion-build-type
func FrameCouchbaseVerFromNsServerStreamingRestApi(ver string) (CouchbaseVer, error) {
segs := strings.Split(ver, "-")
if len(segs) < 3 {
return CouchbaseVer{}, ErrInvalidVersion
}
eVer, err := FrameCouchbaseVersionShort(segs[0])
if err != nil {
return eVer, err
}
val, err := strconv.Atoi(segs[1])
if err != nil {
return eVer, ErrInvalidVersion
}
eVer.build = val
eVer.isEnterprise = false
if segs[len(segs)-1] == "enterprise" {
eVer.isEnterprise = true
}
return eVer, nil
}