aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/mcuadros/go-version/normalize.go
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2017-02-09 19:48:13 -0500
committerUnknwon <u@gogs.io>2017-02-09 19:48:13 -0500
commit2fd69f13d9599a6c58b47225565163fd7d87889f (patch)
treefd19e868e1c2e95a5fb83a268f6e393669d6ee79 /vendor/github.com/mcuadros/go-version/normalize.go
parenteb66060cd7b9bce996b1d75ae80ce1ef31d5ce62 (diff)
vendor: check in vendors
Bye bye glide...
Diffstat (limited to 'vendor/github.com/mcuadros/go-version/normalize.go')
-rw-r--r--vendor/github.com/mcuadros/go-version/normalize.go116
1 files changed, 116 insertions, 0 deletions
diff --git a/vendor/github.com/mcuadros/go-version/normalize.go b/vendor/github.com/mcuadros/go-version/normalize.go
new file mode 100644
index 00000000..e2945c9a
--- /dev/null
+++ b/vendor/github.com/mcuadros/go-version/normalize.go
@@ -0,0 +1,116 @@
+package version
+
+import (
+ "regexp"
+ "strings"
+)
+
+var modifierRegex = `[._-]?(?:(stable|beta|b|RC|alpha|a|patch|pl|p)(?:[.-]?(\d+))?)?([.-]?dev)?`
+
+var regexpMasterLikeBranches = regexp.MustCompile(`^(?:dev-)?(?:master|trunk|default)$`)
+var regexpBranchNormalize = regexp.MustCompile(`(?i)^v?(\d+)(\.(?:\d+|[x*]))?(\.(?:\d+|[x*]))?(\.(?:\d+|[x*]))?$`)
+
+// Normalizes a version string to be able to perform comparisons on it
+//
+// Example:
+// version.Normalize("10.4.13-b")
+// Returns: 10.4.13.0-beta
+//
+func Normalize(version string) string {
+
+ // ignore aliases and just assume the alias is required instead of the source
+ result := RegFind(`^([^,\s]+) +as +([^,\s]+)$`, version)
+ if result != nil {
+ version = result[1]
+ }
+
+ // match master-like branches
+ if regexpMasterLikeBranches.MatchString(strings.ToLower(version)) {
+ return "9999999-dev"
+ }
+
+ if strings.HasPrefix(strings.ToLower(version), "dev-") {
+ return "dev-" + version[4:len(version)]
+ }
+
+ index := 0
+
+ // match classical versioning
+ result = RegFind(`(?i)^v?(\d{1,3})(\.\d+)?(\.\d+)?(\.\d+)?`+modifierRegex+`$`, version)
+ if result != nil {
+ version = ""
+ for _, val := range result[1:5] {
+ if val != "" {
+ version = version + val
+ } else {
+ version = version + ".0"
+ }
+ }
+
+ index = 5
+ } else {
+ // match date-based versioning
+ result = RegFind(`(?i)^v?(\d{4}(?:[.:-]?\d{2}){1,6}(?:[.:-]?\d{1,3})?)`+modifierRegex+`$`, version)
+ if result != nil {
+ version = regexp.MustCompile(`\D`).ReplaceAllString(result[1], "-")
+ index = 2
+ }
+ }
+
+ if index != 0 {
+ if result[index] != "" {
+ if result[index] == "stable" {
+ return version
+ }
+
+ version = version + "-" + expandStability(result[index])
+ if result[index+1] != "" {
+ version = version + result[index+1]
+ }
+ }
+
+ if result[index+2] != "" {
+ version = version + "-dev"
+ }
+
+ return version
+ }
+
+ result = RegFind(`(?i)(.*?)[.-]?dev$`, version)
+ if result != nil {
+ return normalizeBranch(result[1])
+ }
+
+ return version
+}
+
+func normalizeBranch(name string) string {
+ name = strings.Trim(name, " ")
+
+ if name == "master" || name == "trunk" || name == "default" {
+ return Normalize(name)
+ }
+
+ replace := strings.NewReplacer("*", "9999999", "x", "9999999")
+
+ matched := regexpBranchNormalize.FindAllStringSubmatch(name, -1)
+ if matched != nil {
+ name = ""
+ for _, val := range matched[0][1:5] {
+ if val != "" {
+ name = name + replace.Replace(val)
+ } else {
+ name = name + ".9999999"
+ }
+ }
+
+ return name + "-dev"
+
+ }
+
+ if strings.HasSuffix(strings.ToLower(name), "-dev") {
+ return name
+ }
+
+ return "dev-" + name
+}