Last active
May 14, 2018 19:17
-
-
Save tahmmee/67d420a1a28def4b7fe47350036484f9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
} | |
} | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
======================= 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)