diff --git a/.travis.yml b/.travis.yml index eaad43e..9c5f4d7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: go go: - - 1.12.17 + - 1.14.6 install: - export PATH=$PATH:$HOME/gopath/bin - go get -u github.com/opennota/check/cmd/structcheck diff --git a/cmd/commands/beefix/fix.go b/cmd/commands/beefix/fix.go index 1345bf0..5090881 100644 --- a/cmd/commands/beefix/fix.go +++ b/cmd/commands/beefix/fix.go @@ -1,232 +1,48 @@ package beefix import ( - "fmt" - "go/parser" - "go/token" - "io/ioutil" - "os" - "path/filepath" - "regexp" "strings" "github.com/beego/bee/cmd/commands" "github.com/beego/bee/cmd/commands/version" beeLogger "github.com/beego/bee/logger" - "github.com/beego/bee/logger/colors" + "github.com/beego/bee/utils" ) var CmdFix = &commands.Command{ UsageLine: "fix", Short: "Fixes your application by making it compatible with newer versions of Beego", - Long: `As of {{"Beego 1.6"|bold}}, there are some backward compatibility issues. - + Long: ` The command 'fix' will try to solve those issues by upgrading your code base - to be compatible with Beego version 1.6+. + to be compatible with Beego old version + -s source version + -t target version + + example: bee fix -s 1 -t 2 means that upgrade Beego version from v1.x to v2.x `, } +var ( + source, target utils.DocValue +) + func init() { CmdFix.Run = runFix CmdFix.PreRun = func(cmd *commands.Command, args []string) { version.ShowShortVersionBanner() } + CmdFix.Flag.Var(&source, "s", "source version") + CmdFix.Flag.Var(&target, "t", "target version") commands.AvailableCommands = append(commands.AvailableCommands, CmdFix) } func runFix(cmd *commands.Command, args []string) int { - output := cmd.Out() - - beeLogger.Log.Info("Upgrading the application...") - - dir, err := os.Getwd() - if err != nil { - beeLogger.Log.Fatalf("Error while getting the current working directory: %s", err) + t := target.String() + if t == "" || t == "1.6"{ + return fixTo16(cmd, args) + } else if strings.HasPrefix(t, "2") { + // upgrade to v2 + return fix1To2() } - filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { - if info.IsDir() { - if strings.HasPrefix(info.Name(), ".") { - return filepath.SkipDir - } - return nil - } - if err != nil { - return err - } - if strings.HasSuffix(info.Name(), ".exe") { - return nil - } - err = fixFile(path) - fmt.Fprintf(output, colors.GreenBold("\tfix\t")+"%s\n", path) - if err != nil { - beeLogger.Log.Errorf("Could not fix file: %s", err) - } - return err - }) - beeLogger.Log.Success("Upgrade Done!") + beeLogger.Log.Info("The target is compatible version, do nothing") return 0 } - -var rules = []string{ - "beego.AppName", "beego.BConfig.AppName", - "beego.RunMode", "beego.BConfig.RunMode", - "beego.RecoverPanic", "beego.BConfig.RecoverPanic", - "beego.RouterCaseSensitive", "beego.BConfig.RouterCaseSensitive", - "beego.BeegoServerName", "beego.BConfig.ServerName", - "beego.EnableGzip", "beego.BConfig.EnableGzip", - "beego.ErrorsShow", "beego.BConfig.EnableErrorsShow", - "beego.CopyRequestBody", "beego.BConfig.CopyRequestBody", - "beego.MaxMemory", "beego.BConfig.MaxMemory", - "beego.Graceful", "beego.BConfig.Listen.Graceful", - "beego.HttpAddr", "beego.BConfig.Listen.HTTPAddr", - "beego.HttpPort", "beego.BConfig.Listen.HTTPPort", - "beego.ListenTCP4", "beego.BConfig.Listen.ListenTCP4", - "beego.EnableHttpListen", "beego.BConfig.Listen.EnableHTTP", - "beego.EnableHttpTLS", "beego.BConfig.Listen.EnableHTTPS", - "beego.HttpsAddr", "beego.BConfig.Listen.HTTPSAddr", - "beego.HttpsPort", "beego.BConfig.Listen.HTTPSPort", - "beego.HttpCertFile", "beego.BConfig.Listen.HTTPSCertFile", - "beego.HttpKeyFile", "beego.BConfig.Listen.HTTPSKeyFile", - "beego.EnableAdmin", "beego.BConfig.Listen.EnableAdmin", - "beego.AdminHttpAddr", "beego.BConfig.Listen.AdminAddr", - "beego.AdminHttpPort", "beego.BConfig.Listen.AdminPort", - "beego.UseFcgi", "beego.BConfig.Listen.EnableFcgi", - "beego.HttpServerTimeOut", "beego.BConfig.Listen.ServerTimeOut", - "beego.AutoRender", "beego.BConfig.WebConfig.AutoRender", - "beego.ViewsPath", "beego.BConfig.WebConfig.ViewsPath", - "beego.StaticDir", "beego.BConfig.WebConfig.StaticDir", - "beego.StaticExtensionsToGzip", "beego.BConfig.WebConfig.StaticExtensionsToGzip", - "beego.DirectoryIndex", "beego.BConfig.WebConfig.DirectoryIndex", - "beego.FlashName", "beego.BConfig.WebConfig.FlashName", - "beego.FlashSeperator", "beego.BConfig.WebConfig.FlashSeparator", - "beego.EnableDocs", "beego.BConfig.WebConfig.EnableDocs", - "beego.XSRFKEY", "beego.BConfig.WebConfig.XSRFKey", - "beego.EnableXSRF", "beego.BConfig.WebConfig.EnableXSRF", - "beego.XSRFExpire", "beego.BConfig.WebConfig.XSRFExpire", - "beego.TemplateLeft", "beego.BConfig.WebConfig.TemplateLeft", - "beego.TemplateRight", "beego.BConfig.WebConfig.TemplateRight", - "beego.SessionOn", "beego.BConfig.WebConfig.Session.SessionOn", - "beego.SessionProvider", "beego.BConfig.WebConfig.Session.SessionProvider", - "beego.SessionName", "beego.BConfig.WebConfig.Session.SessionName", - "beego.SessionGCMaxLifetime", "beego.BConfig.WebConfig.Session.SessionGCMaxLifetime", - "beego.SessionSavePath", "beego.BConfig.WebConfig.Session.SessionProviderConfig", - "beego.SessionCookieLifeTime", "beego.BConfig.WebConfig.Session.SessionCookieLifeTime", - "beego.SessionAutoSetCookie", "beego.BConfig.WebConfig.Session.SessionAutoSetCookie", - "beego.SessionDomain", "beego.BConfig.WebConfig.Session.SessionDomain", - "Ctx.Input.CopyBody(", "Ctx.Input.CopyBody(beego.BConfig.MaxMemory", - ".UrlFor(", ".URLFor(", - ".ServeJson(", ".ServeJSON(", - ".ServeXml(", ".ServeXML(", - ".ServeJsonp(", ".ServeJSONP(", - ".XsrfToken(", ".XSRFToken(", - ".CheckXsrfCookie(", ".CheckXSRFCookie(", - ".XsrfFormHtml(", ".XSRFFormHTML(", - "beego.UrlFor(", "beego.URLFor(", - "beego.GlobalDocApi", "beego.GlobalDocAPI", - "beego.Errorhandler", "beego.ErrorHandler", - "Output.Jsonp(", "Output.JSONP(", - "Output.Json(", "Output.JSON(", - "Output.Xml(", "Output.XML(", - "Input.Uri()", "Input.URI()", - "Input.Url()", "Input.URL()", - "Input.AcceptsHtml()", "Input.AcceptsHTML()", - "Input.AcceptsXml()", "Input.AcceptsXML()", - "Input.AcceptsJson()", "Input.AcceptsJSON()", - "Ctx.XsrfToken()", "Ctx.XSRFToken()", - "Ctx.CheckXsrfCookie()", "Ctx.CheckXSRFCookie()", - "session.SessionStore", "session.Store", - ".TplNames", ".TplName", - "swagger.ApiRef", "swagger.APIRef", - "swagger.ApiDeclaration", "swagger.APIDeclaration", - "swagger.Api", "swagger.API", - "swagger.ApiRef", "swagger.APIRef", - "swagger.Infomation", "swagger.Information", - "toolbox.UrlMap", "toolbox.URLMap", - "logs.LoggerInterface", "logs.Logger", - "Input.Request", "Input.Context.Request", - "Input.Params)", "Input.Params())", - "httplib.BeegoHttpSettings", "httplib.BeegoHTTPSettings", - "httplib.BeegoHttpRequest", "httplib.BeegoHTTPRequest", - ".TlsClientConfig", ".TLSClientConfig", - ".JsonBody", ".JSONBody", - ".ToJson", ".ToJSON", - ".ToXml", ".ToXML", - "beego.Html2str", "beego.HTML2str", - "beego.AssetsCss", "beego.AssetsCSS", - "orm.DR_Sqlite", "orm.DRSqlite", - "orm.DR_Postgres", "orm.DRPostgres", - "orm.DR_MySQL", "orm.DRMySQL", - "orm.DR_Oracle", "orm.DROracle", - "orm.Col_Add", "orm.ColAdd", - "orm.Col_Minus", "orm.ColMinus", - "orm.Col_Multiply", "orm.ColMultiply", - "orm.Col_Except", "orm.ColExcept", - "GenerateOperatorSql", "GenerateOperatorSQL", - "OperatorSql", "OperatorSQL", - "orm.Debug_Queries", "orm.DebugQueries", - "orm.COMMA_SPACE", "orm.CommaSpace", - ".SendOut()", ".DoRequest()", - "validation.ValidationError", "validation.Error", -} - -func fixFile(file string) error { - rp := strings.NewReplacer(rules...) - content, err := ioutil.ReadFile(file) - if err != nil { - return err - } - fixed := rp.Replace(string(content)) - - // Forword the RequestBody from the replace - // "Input.Request", "Input.Context.Request", - fixed = strings.Replace(fixed, "Input.Context.RequestBody", "Input.RequestBody", -1) - - // Regexp replace - pareg := regexp.MustCompile(`(Input.Params\[")(.*)("])`) - fixed = pareg.ReplaceAllString(fixed, "Input.Param(\"$2\")") - pareg = regexp.MustCompile(`(Input.Data\[\")(.*)(\"\])(\s)(=)(\s)(.*)`) - fixed = pareg.ReplaceAllString(fixed, "Input.SetData(\"$2\", $7)") - pareg = regexp.MustCompile(`(Input.Data\[\")(.*)(\"\])`) - fixed = pareg.ReplaceAllString(fixed, "Input.Data(\"$2\")") - // Fix the cache object Put method - pareg = regexp.MustCompile(`(\.Put\(\")(.*)(\",)(\s)(.*)(,\s*)([^\*.]*)(\))`) - if pareg.MatchString(fixed) && strings.HasSuffix(file, ".go") { - fixed = pareg.ReplaceAllString(fixed, ".Put(\"$2\", $5, $7*time.Second)") - fset := token.NewFileSet() // positions are relative to fset - f, err := parser.ParseFile(fset, file, nil, parser.ImportsOnly) - if err != nil { - panic(err) - } - // Print the imports from the file's AST. - hasTimepkg := false - for _, s := range f.Imports { - if s.Path.Value == `"time"` { - hasTimepkg = true - break - } - } - if !hasTimepkg { - fixed = strings.Replace(fixed, "import (", "import (\n\t\"time\"", 1) - } - } - // Replace the v.Apis in docs.go - if strings.Contains(file, "docs.go") { - fixed = strings.Replace(fixed, "v.Apis", "v.APIs", -1) - } - // Replace the config file - if strings.HasSuffix(file, ".conf") { - fixed = strings.Replace(fixed, "HttpCertFile", "HTTPSCertFile", -1) - fixed = strings.Replace(fixed, "HttpKeyFile", "HTTPSKeyFile", -1) - fixed = strings.Replace(fixed, "EnableHttpListen", "HTTPEnable", -1) - fixed = strings.Replace(fixed, "EnableHttpTLS", "EnableHTTPS", -1) - fixed = strings.Replace(fixed, "EnableHttpTLS", "EnableHTTPS", -1) - fixed = strings.Replace(fixed, "BeegoServerName", "ServerName", -1) - fixed = strings.Replace(fixed, "AdminHttpAddr", "AdminAddr", -1) - fixed = strings.Replace(fixed, "AdminHttpPort", "AdminPort", -1) - fixed = strings.Replace(fixed, "HttpServerTimeOut", "ServerTimeOut", -1) - } - err = os.Truncate(file, 0) - if err != nil { - return err - } - return ioutil.WriteFile(file, []byte(fixed), 0666) -} diff --git a/cmd/commands/beefix/fix1To2.go b/cmd/commands/beefix/fix1To2.go new file mode 100644 index 0000000..28365f7 --- /dev/null +++ b/cmd/commands/beefix/fix1To2.go @@ -0,0 +1,49 @@ +// Copyright 2020 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package beefix + +import ( + "os" + "os/exec" + + beeLogger "github.com/beego/bee/logger" +) + +func fix1To2() int { + beeLogger.Log.Info("Upgrading the application...") + + cmdStr := `find ./ -name '*.go' -type f -exec sed -i '' -e 's/github.com\/astaxie\/beego/github.com\/astaxie\/beego\/adapter/g' {} \;` + err := runShell(cmdStr) + if err != nil { + return 1 + } + cmdStr = `find ./ -name '*.go' -type f -exec sed -i '' -e 's/"github.com\/astaxie\/beego\/adapter"/beego "github.com\/astaxie\/beego\/adapter"/g' {} \;` + err = runShell(cmdStr) + if err != nil { + return 1 + } + return 0 +} + +func runShell(cmdStr string) error { + c := exec.Command("sh", "-c", cmdStr) + c.Stdout = os.Stdout + err := c.Run() + if err != nil { + beeLogger.Log.Errorf("execute command [%s] failed: %s", cmdStr, err.Error()) + return err + } + return nil +} \ No newline at end of file diff --git a/cmd/commands/beefix/fixTo1.6.go b/cmd/commands/beefix/fixTo1.6.go new file mode 100644 index 0000000..8e38f67 --- /dev/null +++ b/cmd/commands/beefix/fixTo1.6.go @@ -0,0 +1,231 @@ +// Copyright 2020 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package beefix + +import ( + "fmt" + "go/parser" + "go/token" + "io/ioutil" + "os" + "path/filepath" + "regexp" + "strings" + + "github.com/beego/bee/cmd/commands" + beeLogger "github.com/beego/bee/logger" + "github.com/beego/bee/logger/colors" +) + +// fixTo16 upgrade beego to 1.6 +func fixTo16(cmd *commands.Command, args []string) int { + output := cmd.Out() + + beeLogger.Log.Info("Upgrading the application...") + + dir, err := os.Getwd() + if err != nil { + beeLogger.Log.Fatalf("Error while getting the current working directory: %s", err) + } + + filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { + if info.IsDir() { + if strings.HasPrefix(info.Name(), ".") { + return filepath.SkipDir + } + return nil + } + if err != nil { + return err + } + if strings.HasSuffix(info.Name(), ".exe") { + return nil + } + err = fixFile(path) + fmt.Fprintf(output, colors.GreenBold("\tfix\t")+"%s\n", path) + if err != nil { + beeLogger.Log.Errorf("Could not fix file: %s", err) + } + return err + }) + beeLogger.Log.Success("Upgrade Done!") + return 0 +} + +var rules = []string{ + "beego.AppName", "beego.BConfig.AppName", + "beego.RunMode", "beego.BConfig.RunMode", + "beego.RecoverPanic", "beego.BConfig.RecoverPanic", + "beego.RouterCaseSensitive", "beego.BConfig.RouterCaseSensitive", + "beego.BeegoServerName", "beego.BConfig.ServerName", + "beego.EnableGzip", "beego.BConfig.EnableGzip", + "beego.ErrorsShow", "beego.BConfig.EnableErrorsShow", + "beego.CopyRequestBody", "beego.BConfig.CopyRequestBody", + "beego.MaxMemory", "beego.BConfig.MaxMemory", + "beego.Graceful", "beego.BConfig.Listen.Graceful", + "beego.HttpAddr", "beego.BConfig.Listen.HTTPAddr", + "beego.HttpPort", "beego.BConfig.Listen.HTTPPort", + "beego.ListenTCP4", "beego.BConfig.Listen.ListenTCP4", + "beego.EnableHttpListen", "beego.BConfig.Listen.EnableHTTP", + "beego.EnableHttpTLS", "beego.BConfig.Listen.EnableHTTPS", + "beego.HttpsAddr", "beego.BConfig.Listen.HTTPSAddr", + "beego.HttpsPort", "beego.BConfig.Listen.HTTPSPort", + "beego.HttpCertFile", "beego.BConfig.Listen.HTTPSCertFile", + "beego.HttpKeyFile", "beego.BConfig.Listen.HTTPSKeyFile", + "beego.EnableAdmin", "beego.BConfig.Listen.EnableAdmin", + "beego.AdminHttpAddr", "beego.BConfig.Listen.AdminAddr", + "beego.AdminHttpPort", "beego.BConfig.Listen.AdminPort", + "beego.UseFcgi", "beego.BConfig.Listen.EnableFcgi", + "beego.HttpServerTimeOut", "beego.BConfig.Listen.ServerTimeOut", + "beego.AutoRender", "beego.BConfig.WebConfig.AutoRender", + "beego.ViewsPath", "beego.BConfig.WebConfig.ViewsPath", + "beego.StaticDir", "beego.BConfig.WebConfig.StaticDir", + "beego.StaticExtensionsToGzip", "beego.BConfig.WebConfig.StaticExtensionsToGzip", + "beego.DirectoryIndex", "beego.BConfig.WebConfig.DirectoryIndex", + "beego.FlashName", "beego.BConfig.WebConfig.FlashName", + "beego.FlashSeperator", "beego.BConfig.WebConfig.FlashSeparator", + "beego.EnableDocs", "beego.BConfig.WebConfig.EnableDocs", + "beego.XSRFKEY", "beego.BConfig.WebConfig.XSRFKey", + "beego.EnableXSRF", "beego.BConfig.WebConfig.EnableXSRF", + "beego.XSRFExpire", "beego.BConfig.WebConfig.XSRFExpire", + "beego.TemplateLeft", "beego.BConfig.WebConfig.TemplateLeft", + "beego.TemplateRight", "beego.BConfig.WebConfig.TemplateRight", + "beego.SessionOn", "beego.BConfig.WebConfig.Session.SessionOn", + "beego.SessionProvider", "beego.BConfig.WebConfig.Session.SessionProvider", + "beego.SessionName", "beego.BConfig.WebConfig.Session.SessionName", + "beego.SessionGCMaxLifetime", "beego.BConfig.WebConfig.Session.SessionGCMaxLifetime", + "beego.SessionSavePath", "beego.BConfig.WebConfig.Session.SessionProviderConfig", + "beego.SessionCookieLifeTime", "beego.BConfig.WebConfig.Session.SessionCookieLifeTime", + "beego.SessionAutoSetCookie", "beego.BConfig.WebConfig.Session.SessionAutoSetCookie", + "beego.SessionDomain", "beego.BConfig.WebConfig.Session.SessionDomain", + "Ctx.Input.CopyBody(", "Ctx.Input.CopyBody(beego.BConfig.MaxMemory", + ".UrlFor(", ".URLFor(", + ".ServeJson(", ".ServeJSON(", + ".ServeXml(", ".ServeXML(", + ".ServeJsonp(", ".ServeJSONP(", + ".XsrfToken(", ".XSRFToken(", + ".CheckXsrfCookie(", ".CheckXSRFCookie(", + ".XsrfFormHtml(", ".XSRFFormHTML(", + "beego.UrlFor(", "beego.URLFor(", + "beego.GlobalDocApi", "beego.GlobalDocAPI", + "beego.Errorhandler", "beego.ErrorHandler", + "Output.Jsonp(", "Output.JSONP(", + "Output.Json(", "Output.JSON(", + "Output.Xml(", "Output.XML(", + "Input.Uri()", "Input.URI()", + "Input.Url()", "Input.URL()", + "Input.AcceptsHtml()", "Input.AcceptsHTML()", + "Input.AcceptsXml()", "Input.AcceptsXML()", + "Input.AcceptsJson()", "Input.AcceptsJSON()", + "Ctx.XsrfToken()", "Ctx.XSRFToken()", + "Ctx.CheckXsrfCookie()", "Ctx.CheckXSRFCookie()", + "session.SessionStore", "session.Store", + ".TplNames", ".TplName", + "swagger.ApiRef", "swagger.APIRef", + "swagger.ApiDeclaration", "swagger.APIDeclaration", + "swagger.Api", "swagger.API", + "swagger.ApiRef", "swagger.APIRef", + "swagger.Infomation", "swagger.Information", + "toolbox.UrlMap", "toolbox.URLMap", + "logs.LoggerInterface", "logs.Logger", + "Input.Request", "Input.Context.Request", + "Input.Params)", "Input.Params())", + "httplib.BeegoHttpSettings", "httplib.BeegoHTTPSettings", + "httplib.BeegoHttpRequest", "httplib.BeegoHTTPRequest", + ".TlsClientConfig", ".TLSClientConfig", + ".JsonBody", ".JSONBody", + ".ToJson", ".ToJSON", + ".ToXml", ".ToXML", + "beego.Html2str", "beego.HTML2str", + "beego.AssetsCss", "beego.AssetsCSS", + "orm.DR_Sqlite", "orm.DRSqlite", + "orm.DR_Postgres", "orm.DRPostgres", + "orm.DR_MySQL", "orm.DRMySQL", + "orm.DR_Oracle", "orm.DROracle", + "orm.Col_Add", "orm.ColAdd", + "orm.Col_Minus", "orm.ColMinus", + "orm.Col_Multiply", "orm.ColMultiply", + "orm.Col_Except", "orm.ColExcept", + "GenerateOperatorSql", "GenerateOperatorSQL", + "OperatorSql", "OperatorSQL", + "orm.Debug_Queries", "orm.DebugQueries", + "orm.COMMA_SPACE", "orm.CommaSpace", + ".SendOut()", ".DoRequest()", + "validation.ValidationError", "validation.Error", +} + +func fixFile(file string) error { + rp := strings.NewReplacer(rules...) + content, err := ioutil.ReadFile(file) + if err != nil { + return err + } + fixed := rp.Replace(string(content)) + + // Forword the RequestBody from the replace + // "Input.Request", "Input.Context.Request", + fixed = strings.Replace(fixed, "Input.Context.RequestBody", "Input.RequestBody", -1) + + // Regexp replace + pareg := regexp.MustCompile(`(Input.Params\[")(.*)("])`) + fixed = pareg.ReplaceAllString(fixed, "Input.Param(\"$2\")") + pareg = regexp.MustCompile(`(Input.Data\[\")(.*)(\"\])(\s)(=)(\s)(.*)`) + fixed = pareg.ReplaceAllString(fixed, "Input.SetData(\"$2\", $7)") + pareg = regexp.MustCompile(`(Input.Data\[\")(.*)(\"\])`) + fixed = pareg.ReplaceAllString(fixed, "Input.Data(\"$2\")") + // Fix the cache object Put method + pareg = regexp.MustCompile(`(\.Put\(\")(.*)(\",)(\s)(.*)(,\s*)([^\*.]*)(\))`) + if pareg.MatchString(fixed) && strings.HasSuffix(file, ".go") { + fixed = pareg.ReplaceAllString(fixed, ".Put(\"$2\", $5, $7*time.Second)") + fset := token.NewFileSet() // positions are relative to fset + f, err := parser.ParseFile(fset, file, nil, parser.ImportsOnly) + if err != nil { + panic(err) + } + // Print the imports from the file's AST. + hasTimepkg := false + for _, s := range f.Imports { + if s.Path.Value == `"time"` { + hasTimepkg = true + break + } + } + if !hasTimepkg { + fixed = strings.Replace(fixed, "import (", "import (\n\t\"time\"", 1) + } + } + // Replace the v.Apis in docs.go + if strings.Contains(file, "docs.go") { + fixed = strings.Replace(fixed, "v.Apis", "v.APIs", -1) + } + // Replace the config file + if strings.HasSuffix(file, ".conf") { + fixed = strings.Replace(fixed, "HttpCertFile", "HTTPSCertFile", -1) + fixed = strings.Replace(fixed, "HttpKeyFile", "HTTPSKeyFile", -1) + fixed = strings.Replace(fixed, "EnableHttpListen", "HTTPEnable", -1) + fixed = strings.Replace(fixed, "EnableHttpTLS", "EnableHTTPS", -1) + fixed = strings.Replace(fixed, "EnableHttpTLS", "EnableHTTPS", -1) + fixed = strings.Replace(fixed, "BeegoServerName", "ServerName", -1) + fixed = strings.Replace(fixed, "AdminHttpAddr", "AdminAddr", -1) + fixed = strings.Replace(fixed, "AdminHttpPort", "AdminPort", -1) + fixed = strings.Replace(fixed, "HttpServerTimeOut", "ServerTimeOut", -1) + } + err = os.Truncate(file, 0) + if err != nil { + return err + } + return ioutil.WriteFile(file, []byte(fixed), 0666) +} + diff --git a/go.mod b/go.mod index aee2524..fa7274f 100644 --- a/go.mod +++ b/go.mod @@ -13,6 +13,7 @@ require ( github.com/gorilla/websocket v1.4.2 github.com/lib/pq v1.7.0 github.com/pelletier/go-toml v1.2.0 + github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect github.com/smartwalle/pongo2render v1.0.1 github.com/spf13/viper v1.7.0 gopkg.in/yaml.v2 v2.3.0 diff --git a/go.sum b/go.sum index 35bcead..f858703 100644 --- a/go.sum +++ b/go.sum @@ -24,6 +24,7 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmV github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/astaxie/beego v1.12.1 h1:dfpuoxpzLVgclveAXe4PyNKqkzgm5zF4tgF2B3kkM2I= github.com/astaxie/beego v1.12.1/go.mod h1:kPBWpSANNbSdIqOc8SUL9h+1oyBMZhROeYsXQDbidWQ= +github.com/astaxie/beego v1.12.2 h1:CajUexhSX5ONWDiSCpeQBNVfTzOtPb9e9d+3vuU5FuU= github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ= github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp5kat81+DSQrZenVBZXklMLaELspWU= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -198,6 +199,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 h1:DAYUYH5869yV94zvCES9F51oYtN5oGlwjxJJz7ZCnik= +github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg= github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw= github.com/siddontang/ledisdb v0.0.0-20181029004158-becf5f38d373/go.mod h1:mF1DpOSOUiJRMR+FDqaqu3EBqrybQtrDDszLUZ6oxPg= github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA=