Feature goctl error wrap (#995)

* Add `Wrap` in file errorx.go

* Wrap error with `GoctlError`

* format code

* Refactor package `env` to `version`

* Refactor package `IsVersionGatherThan`

* fix typo

Co-authored-by: anqiansong <anqiansong@bytedance.com>
This commit is contained in:
anqiansong
2021-09-05 21:57:44 +08:00
committed by GitHub
parent b42f3fa047
commit 8829c31c0d
7 changed files with 90 additions and 37 deletions

View File

@@ -0,0 +1,53 @@
package version
import (
"encoding/json"
"strings"
)
const BuildVersion = "1.1.11-beta-2"
// GetGoctlVersion returns BuildVersion
func GetGoctlVersion() string {
return BuildVersion
}
var tag = map[string]int{"pre-alpha": 0, "alpha": 1, "pre-bata": 2, "beta": 3, "released": 4, "": 5}
// IsVersionGreaterThan compares whether the current goctl version
// is greater than the target version
func IsVersionGreaterThan(version, target string) bool {
versionNumber, versionTag := convertVersion(version)
targetVersionNumber, targetTag := convertVersion(target)
if versionNumber > targetVersionNumber {
return true
} else if versionNumber < targetVersionNumber {
return false
} else { // unchecked case, in normal, the goctl version does not contains suffix in release.
return tag[versionTag] > tag[targetTag]
}
}
// version format: number[.number]*(-tag)
func convertVersion(version string) (versionNumber float64, tag string) {
splits := strings.Split(version, "-")
tag = strings.Join(splits[1:], "")
var flag bool
numberStr := strings.Map(func(r rune) rune {
if r >= '0' && r <= '9' {
return r
}
if r == '.' {
if flag {
return '_'
}
flag = true
return r
}
return '_'
}, splits[0])
numberStr = strings.ReplaceAll(numberStr, "_", "")
versionNumber, _ = json.Number(numberStr).Float64()
return
}

View File

@@ -0,0 +1,33 @@
package version
import (
"testing"
"github.com/stretchr/testify/assert"
)
func Test_convertVersion(t *testing.T) {
number, tag := convertVersion("1.1.10")
assert.Equal(t, 1.110, number)
assert.Equal(t, "", tag)
number, tag = convertVersion("0.1.11")
assert.Equal(t, 0.111, number)
assert.Equal(t, "", tag)
number, tag = convertVersion("1.11-pre")
assert.Equal(t, 1.11, number)
assert.Equal(t, "pre", tag)
number, tag = convertVersion("1.11-beta-v1")
assert.Equal(t, 1.11, number)
assert.Equal(t, "betav1", tag)
}
func Test_IsVersionGatherThan(t *testing.T) {
assert.False(t, IsVersionGreaterThan("0.11", "1.1"))
assert.True(t, IsVersionGreaterThan("0.112", "0.1"))
assert.True(t, IsVersionGreaterThan("1.1.10", "1.0.111"))
assert.True(t, IsVersionGreaterThan("1.1.10", "1.1.10-pre"))
assert.True(t, IsVersionGreaterThan("1.1.11-pre", "1.1.10"))
}