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 (
|
||||
"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 {
|
Loading…
Reference in New Issue