|
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