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