diff options
author | Unknwon <u@gogs.io> | 2017-02-09 19:48:13 -0500 |
---|---|---|
committer | Unknwon <u@gogs.io> | 2017-02-09 19:48:13 -0500 |
commit | 2fd69f13d9599a6c58b47225565163fd7d87889f (patch) | |
tree | fd19e868e1c2e95a5fb83a268f6e393669d6ee79 /vendor/github.com/mcuadros/go-version/normalize.go | |
parent | eb66060cd7b9bce996b1d75ae80ce1ef31d5ce62 (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.go | 116 |
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 +} |