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,15 @@
package errorx
import (
"errors"
"testing"
"github.com/stretchr/testify/assert"
)
func TestWrap(t *testing.T) {
err := errors.New("foo")
err = Wrap(err)
_, ok := err.(*GoctlError)
assert.True(t, ok)
}

View File

@@ -0,0 +1,44 @@
package errorx
import (
"fmt"
"runtime"
"strings"
"github.com/tal-tech/go-zero/tools/goctl/internal/version"
)
var errorFormat = `goctl: generation error: %+v
goctl version: %s
%s`
type GoctlError struct {
message []string
err error
}
func (e *GoctlError) Error() string {
detail := wrapMessage(e.message...)
v := fmt.Sprintf("%s %s/%s", version.BuildVersion, runtime.GOOS, runtime.GOARCH)
return fmt.Sprintf(errorFormat, e.err, v, detail)
}
// Wrap wraps an error with goctl version and message.
func Wrap(err error, message ...string) error {
e, ok := err.(*GoctlError)
if ok {
return e
}
return &GoctlError{
message: message,
err: err,
}
}
func wrapMessage(message ...string) string {
if len(message) == 0 {
return ""
}
return fmt.Sprintf(`message: %s`, strings.Join(message, "\n"))
}

View File

@@ -1,28 +1,22 @@
package env
package version
import (
"encoding/json"
"os"
"strings"
)
// GetGoctlVersion obtains from the environment variable GOCTL_VERSION, prior to 1.1.11,
// the goctl version was 1.1.10 by default.
// the goctl version is set at runtime in the environment variable GOCTL_VERSION,
// see the detail at https://github.com/tal-tech/go-zero/blob/master/tools/goctl/goctl.go
const BuildVersion = "1.1.11-beta-2"
// GetGoctlVersion returns BuildVersion
func GetGoctlVersion() string {
currentVersion := os.Getenv("GOCTL_VERSION")
if currentVersion == "" {
currentVersion = "1.1.10"
}
return currentVersion
return BuildVersion
}
var tag = map[string]int{"pre-alpha": 0, "alpha": 1, "pre-bata": 2, "beta": 3, "released": 4, "": 5}
// IsVersionGatherThan compares whether the current goctl version
// is gather than the target version
func IsVersionGatherThan(version, target string) bool {
// 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 {

View File

@@ -1,4 +1,4 @@
package env
package version
import (
"testing"
@@ -25,9 +25,9 @@ func Test_convertVersion(t *testing.T) {
}
func Test_IsVersionGatherThan(t *testing.T) {
assert.False(t, IsVersionGatherThan("0.11", "1.1"))
assert.True(t, IsVersionGatherThan("0.112", "0.1"))
assert.True(t, IsVersionGatherThan("1.1.10", "1.0.111"))
assert.True(t, IsVersionGatherThan("1.1.10", "1.1.10-pre"))
assert.True(t, IsVersionGatherThan("1.1.11-pre", "1.1.10"))
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"))
}