Skip to content

Instantly share code, notes, and snippets.

@tahmmee
Last active May 14, 2018 19:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tahmmee/67d420a1a28def4b7fe47350036484f9 to your computer and use it in GitHub Desktop.
Save tahmmee/67d420a1a28def4b7fe47350036484f9 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"regexp"
"strings"
)
func parseVersion(s string) (string, error) {
rx := regexp.MustCompile("^[0-9]{1,2}")
ok := rx.MatchString(s)
if !ok {
return s, fmt.Errorf("bad match", s)
}
return rx.FindString(s), nil
}
func parseGit(s string) (string, error) {
rx := regexp.MustCompile("^v[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}")
ok := rx.MatchString(s)
if !ok {
return s, fmt.Errorf("bad match", s)
}
return rx.FindString(s), nil
}
func main() {
// major|minor versions
fmt.Println("======================= min/maj versions ================")
versions := map[string]string{
"1": "1",
"1+": "1",
"1+a": "1",
"1-9": "1",
"11-1": "11",
"111": "11",
"9.7": "9",
"9+": "9",
}
for t, ex := range versions {
res, err := parseVersion(t)
if err != nil {
fmt.Printf("ERROR: failed to parse %s, expected %s: %v\n", t, ex, err)
} else {
if res != ex {
fmt.Printf("ERROR: got %s, expected %s \n", res, ex)
} else {
fmt.Printf("OK: %s = %s \n", t, res)
}
}
}
// version with expected version
fmt.Println("======================= git versions ================")
gitVersions := map[string]string{
"v1.9.7": "v1.9.7",
"v1.9.7+": "v1.9.7",
"v1.9.7-2+": "v1.9.7",
"v1.9.7+abcd999": "v1.9.7",
"v1.10.1": "v1.10.1",
"v1.10.1-2": "v1.10.1",
"v1.10.1-2+7d2976e4bcbeb9": "v1.10.1",
"v1.9.7-2+231cc32d0a1119": "v1.9.7",
}
for t, ex := range gitVersions {
res, err := parseGit(t)
if err != nil {
fmt.Printf("ERROR: failed to parse %s, expected %s: %v\n", t, ex, err)
} else {
if res != ex {
fmt.Printf("ERROR: got %s, expected %s \n", res, ex)
} else {
// verify major and minor can be parsed out
parts := strings.Split(res[1:], ".")
major := parts[0]
minor := parts[1]
fmt.Printf("OK: %s = %s (major:%s, minor:%s) \n", t, res, major, minor)
}
}
}
}
@tahmmee
Copy link
Author

tahmmee commented May 14, 2018

======================= min/maj versions ================
OK: 1+ = 1
OK: 111 = 11
OK: 9.7 = 9
OK: 9+ = 9
OK: 1 = 1
OK: 1+a = 1
OK: 1-9 = 1
OK: 11-1 = 11
======================= git versions ================
OK: v1.9.7 = v1.9.7 (major:1, minor:9)
OK: v1.9.7+ = v1.9.7 (major:1, minor:9)
OK: v1.9.7-2+ = v1.9.7 (major:1, minor:9)
OK: v1.9.7+abcd999 = v1.9.7 (major:1, minor:9)
OK: v1.10.1 = v1.10.1 (major:1, minor:10)
OK: v1.10.1-2 = v1.10.1 (major:1, minor:10)
OK: v1.10.1-2+7d2976e4bcbeb9 = v1.10.1 (major:1, minor:10)
OK: v1.9.7-2+231cc32d0a1119 = v1.9.7 (major:1, minor:9)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment