|
4 | 4 | "encoding/json" |
5 | 5 | "errors" |
6 | 6 | "fmt" |
7 | | - "math" |
8 | 7 | "mime" |
9 | 8 | "net/http" |
10 | 9 | "os" |
@@ -136,6 +135,10 @@ func ClientVersionFromCGVersion(owner, repo, cgVersion string) string { |
136 | 135 | return "latest" |
137 | 136 | } |
138 | 137 |
|
| 138 | + return compatibleLibraryVersion(versions, cgVersion) |
| 139 | +} |
| 140 | + |
| 141 | +func compatibleLibraryVersion(versions map[string]string, cgVersion string) string { |
139 | 142 | // check exact match |
140 | 143 | if v, ok := versions[cgVersion]; ok { |
141 | 144 | return v |
@@ -181,32 +184,33 @@ func ClientVersionFromCGVersion(owner, repo, cgVersion string) string { |
181 | 184 | // check closest minor version above requested |
182 | 185 | closestMinor := -1 |
183 | 186 | for _, v := range compatibleMinorVersions { |
184 | | - if v > minor && float64(closestMinor-minor) > float64(v-minor) { |
| 187 | + if v > minor && (closestMinor == -1 || closestMinor-minor > v-minor) { |
185 | 188 | closestMinor = v |
186 | 189 | } |
187 | 190 | } |
188 | 191 | if closestMinor >= 0 { |
189 | | - v := fmt.Sprintf("%s.%d", major, minor) |
| 192 | + v := versions[fmt.Sprintf("%s.%d", major, closestMinor)] |
190 | 193 | cli.Warn("No exact version match found. Using client library version %s.", v) |
191 | 194 | return v |
192 | 195 | } |
193 | 196 |
|
194 | 197 | // check closest minor version below requested |
195 | | - closestMinor = math.MaxInt |
| 198 | + closestMinor = -1 |
196 | 199 | for _, v := range compatibleMinorVersions { |
197 | | - if v < minor && float64(minor-closestMinor) > float64(minor-v) { |
| 200 | + if v < minor && (closestMinor == -1 || minor-closestMinor > minor-v) { |
198 | 201 | closestMinor = v |
199 | 202 | } |
200 | 203 | } |
201 | 204 | if closestMinor >= 0 { |
202 | | - v := fmt.Sprintf("%s.%d", major, minor) |
203 | | - cli.Warn("No exact version match found. Using client library version %s.") |
| 205 | + v := versions[fmt.Sprintf("%s.%d", major, closestMinor)] |
| 206 | + cli.Warn("No exact version match found. Using client library version %s.", v) |
204 | 207 | return v |
205 | 208 | } |
206 | 209 |
|
207 | 210 | cli.Warn("No compatible client library version found. Using latest client library version.") |
208 | 211 | return "latest" |
209 | 212 | } |
| 213 | + |
210 | 214 | func HasContentType(h http.Header, mimetype string) bool { |
211 | 215 | contentType := h.Get("Content-type") |
212 | 216 | if contentType == "" { |
|
0 commit comments