1
0

version.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package version
  2. import (
  3. "encoding/json"
  4. "strings"
  5. )
  6. // BuildVersion is the version of goctl.
  7. const BuildVersion = "1.6.0"
  8. var tag = map[string]int{"pre-alpha": 0, "alpha": 1, "pre-bata": 2, "beta": 3, "released": 4, "": 5}
  9. // GetGoctlVersion returns BuildVersion
  10. func GetGoctlVersion() string {
  11. return BuildVersion
  12. }
  13. // IsVersionGreaterThan compares whether the current goctl version
  14. // is greater than the target version
  15. func IsVersionGreaterThan(version, target string) bool {
  16. versionNumber, versionTag := convertVersion(version)
  17. targetVersionNumber, targetTag := convertVersion(target)
  18. if versionNumber > targetVersionNumber {
  19. return true
  20. } else if versionNumber < targetVersionNumber {
  21. return false
  22. } else {
  23. // unchecked case, in normal, the goctl version does not contain suffix in release.
  24. return tag[versionTag] > tag[targetTag]
  25. }
  26. }
  27. // version format: number[.number]*(-tag)
  28. func convertVersion(version string) (versionNumber float64, tag string) {
  29. splits := strings.Split(version, "-")
  30. tag = strings.Join(splits[1:], "")
  31. var flag bool
  32. numberStr := strings.Map(func(r rune) rune {
  33. if r >= '0' && r <= '9' {
  34. return r
  35. }
  36. if r == '.' {
  37. if flag {
  38. return '_'
  39. }
  40. flag = true
  41. return r
  42. }
  43. return '_'
  44. }, splits[0])
  45. numberStr = strings.Replace(numberStr, "_", "", -1)
  46. versionNumber, _ = json.Number(numberStr).Float64()
  47. return
  48. }