From 94c9dee22c3da62054251c8b6d978b8bb27e7d3e Mon Sep 17 00:00:00 2001 From: astaxie Date: Thu, 22 May 2014 10:35:37 +0800 Subject: [PATCH] update bee get beego & go version --- version.go | 64 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 10 deletions(-) diff --git a/version.go b/version.go index a7ae951..01fc406 100644 --- a/version.go +++ b/version.go @@ -1,11 +1,13 @@ package main import ( + "bufio" "fmt" - "log" - "os/exec" - - "github.com/astaxie/beego" + "io" + "os" + path "path/filepath" + "regexp" + "runtime" ) var cmdVersion = &Command{ @@ -26,10 +28,52 @@ func init() { func versionCmd(cmd *Command, args []string) { fmt.Println("bee :" + version) - fmt.Println("beego :" + beego.VERSION) - goversion, err := exec.Command("go", "version").Output() - if err != nil { - log.Fatal(err) - } - fmt.Println("Go :" + string(goversion)) + fmt.Println("beego :" + getbeegoVersion()) + fmt.Println("Go :" + runtime.Version()) +} + +func getbeegoVersion() string { + gopath := os.Getenv("GOPATH") + re, err := regexp.Compile(`const VERSION = "([0-9.]+)"`) + if err != nil { + return "" + } + if gopath == "" { + err = fmt.Errorf("you should set GOPATH in the env") + return "" + } + wgopath := path.SplitList(gopath) + for _, wg := range wgopath { + wg, _ = path.EvalSymlinks(path.Join(wg, "src", "github.com", "astaxie", "beego")) + filename := path.Join(wg, "beego.go") + _, err := os.Stat(filename) + if err != nil { + if os.IsNotExist(err) { + continue + } + ColorLog("[ERRO] get beego.go has error\n") + } + fd, err := os.Open(filename) + if err != nil { + ColorLog("[ERRO] open beego.go has error\n") + continue + } + reader := bufio.NewReader(fd) + for { + byteLine, _, er := reader.ReadLine() + if er != nil && er != io.EOF { + return "" + } + if er == io.EOF { + break + } + line := string(byteLine) + s := re.FindStringSubmatch(line) + if len(s) >= 2 { + return s[1] + } + } + + } + return "you don't install beego,install first: github.com/astaxie/beego" }