diff --git a/createapp.go b/createapp.go deleted file mode 100644 index 7c2fce9..0000000 --- a/createapp.go +++ /dev/null @@ -1,165 +0,0 @@ -package main - -import ( - "fmt" - "os" - path "path/filepath" - "strings" -) - -var cmdCreate = &Command{ - UsageLine: "create [appname]", - Short: "create an application base on beego framework", - Long: ` -create an application base on beego framework - -In the current path, will create a folder named [appname] - -In the appname folder has the follow struct: - - |- main.go - |- conf - |- app.conf - |- controllers - |- default.go - |- models - |- static - |- js - |- css - |- img - |- views - index.tpl - -`, -} - -func init() { - cmdCreate.Run = createapp -} - -func createapp(cmd *Command, args []string) { - curpath, _ := os.Getwd() - if len(args) != 1 { - fmt.Println("error args") - os.Exit(2) - } - - gopath := os.Getenv("GOPATH") - Debugf("gopath:%s", gopath) - if gopath == "" { - fmt.Println("you should set GOPATH in the env") - os.Exit(2) - } - haspath := false - appsrcpath := "" - - wgopath := path.SplitList(gopath) - for _, wg := range wgopath { - wg = path.Join(wg, "src") - - if path.HasPrefix(strings.ToLower(curpath), strings.ToLower(wg)) { - haspath = true - appsrcpath = wg - break - } - } - - if !haspath { - fmt.Printf("can't create application outside of GOPATH `%s`\n", gopath) - fmt.Printf("you first should `cd $GOPATH%ssrc` then use create\n", string(path.Separator)) - os.Exit(2) - } - - apppath := path.Join(curpath, args[0]) - - if _, err := os.Stat(apppath); os.IsNotExist(err) == false { - fmt.Printf("path `%s` exists, can not create app without remove it\n", apppath) - os.Exit(2) - } - - os.MkdirAll(apppath, 0755) - fmt.Println("create app folder:", apppath) - os.Mkdir(path.Join(apppath, "conf"), 0755) - fmt.Println("create conf:", path.Join(apppath, "conf")) - os.Mkdir(path.Join(apppath, "controllers"), 0755) - fmt.Println("create controllers:", path.Join(apppath, "controllers")) - os.Mkdir(path.Join(apppath, "models"), 0755) - fmt.Println("create models:", path.Join(apppath, "models")) - os.Mkdir(path.Join(apppath, "static"), 0755) - fmt.Println("create static:", path.Join(apppath, "static")) - os.Mkdir(path.Join(apppath, "static", "js"), 0755) - fmt.Println("create static js:", path.Join(apppath, "static", "js")) - os.Mkdir(path.Join(apppath, "static", "css"), 0755) - fmt.Println("create static css:", path.Join(apppath, "static", "css")) - os.Mkdir(path.Join(apppath, "static", "img"), 0755) - fmt.Println("create static img:", path.Join(apppath, "static", "img")) - fmt.Println("create views:", path.Join(apppath, "views")) - os.Mkdir(path.Join(apppath, "views"), 0755) - fmt.Println("create conf app.conf:", path.Join(apppath, "conf", "app.conf")) - writetofile(path.Join(apppath, "conf", "app.conf"), strings.Replace(appconf, "{{.Appname}}", args[0], -1)) - - fmt.Println("create controllers default.go:", path.Join(apppath, "controllers", "default.go")) - writetofile(path.Join(apppath, "controllers", "default.go"), controllers) - - fmt.Println("create views index.tpl:", path.Join(apppath, "views", "index.tpl")) - writetofile(path.Join(apppath, "views", "index.tpl"), indextpl) - - fmt.Println("create main.go:", path.Join(apppath, "main.go")) - writetofile(path.Join(apppath, "main.go"), strings.Replace(maingo, "{{.Appname}}", strings.Join(strings.Split(apppath[len(appsrcpath)+1:], string(path.Separator)), "/"), -1)) -} - -var appconf = ` -appname = {{.Appname}} -httpport = 8080 -runmode = dev -` - -var maingo = `package main - -import ( - "{{.Appname}}/controllers" - "github.com/astaxie/beego" -) - -func main() { - beego.Router("/", &controllers.MainController{}) - beego.Run() -} - -` -var controllers = `package controllers - -import ( - "github.com/astaxie/beego" -) - -type MainController struct { - beego.Controller -} - -func (this *MainController) Get() { - this.Data["Username"] = "astaxie" - this.Data["Email"] = "astaxie@gmail.com" - this.TplNames = "index.tpl" -} -` - -var indextpl = ` - - - beego welcome template - - -

Hello, world!{{.Username}},{{.Email}}

- - -` - -func writetofile(filename, content string) { - f, err := os.Create(filename) - if err != nil { - panic(err) - } - defer f.Close() - f.WriteString(content) -} diff --git a/main.go b/main.go index 6a479f6..091ebd4 100644 --- a/main.go +++ b/main.go @@ -1,3 +1,4 @@ +// Bee is a tool for developling applications based on beego framework. package main import ( @@ -56,7 +57,7 @@ func (c *Command) Runnable() bool { } var commands = []*Command{ - cmdCreate, + cmdNew, cmdStart, cmdPack, cmdApiapp, diff --git a/new.go b/new.go new file mode 100644 index 0000000..63ee0d9 --- /dev/null +++ b/new.go @@ -0,0 +1,242 @@ +package main + +import ( + "fmt" + "os" + path "path/filepath" + "strings" +) + +var cmdNew = &Command{ + UsageLine: "new [appname]", + Short: "create an application base on beego framework", + Long: ` +create an application base on beego framework, + +which in the current path with folder named [appname]. + +The [appname] folder has following structure: + + |- main.go + |- conf + |- app.conf + |- controllers + |- default.go + |- models + |- static + |- js + |- css + |- img + |- views + index.tpl + +`, +} + +func init() { + cmdNew.Run = createApp +} + +func createApp(cmd *Command, args []string) { + curpath, _ := os.Getwd() + if len(args) != 1 { + fmt.Println("[ERRO] Argument [appname] is missing") + os.Exit(2) + } + + gopath := os.Getenv("GOPATH") + Debugf("gopath:%s", gopath) + if gopath == "" { + fmt.Printf("[ERRO] $GOPATH not found\n") + fmt.Printf("[HINT] Set $GOPATH in your environment vairables\n") + os.Exit(2) + } + haspath := false + appsrcpath := "" + + wgopath := path.SplitList(gopath) + for _, wg := range wgopath { + wg = path.Join(wg, "src") + + if path.HasPrefix(strings.ToLower(curpath), strings.ToLower(wg)) { + haspath = true + appsrcpath = wg + break + } + } + + if !haspath { + fmt.Printf("[ERRO] Unable to create an application outside of $GOPATH(%s)\n", gopath) + fmt.Printf("[HINT] Change your work directory by `cd $GOPATH%ssrc`\n", string(path.Separator)) + os.Exit(2) + } + + apppath := path.Join(curpath, args[0]) + + if _, err := os.Stat(apppath); os.IsNotExist(err) == false { + fmt.Printf("[ERRO] Path(%s) has alreay existed\n", apppath) + os.Exit(2) + } + + fmt.Println("[INFO] Creating application...") + + os.MkdirAll(apppath, 0755) + fmt.Println(apppath + string(path.Separator)) + os.Mkdir(path.Join(apppath, "conf"), 0755) + fmt.Println(path.Join(apppath, "conf") + string(path.Separator)) + os.Mkdir(path.Join(apppath, "controllers"), 0755) + fmt.Println(path.Join(apppath, "controllers") + string(path.Separator)) + os.Mkdir(path.Join(apppath, "models"), 0755) + fmt.Println(path.Join(apppath, "models") + string(path.Separator)) + os.Mkdir(path.Join(apppath, "static"), 0755) + fmt.Println(path.Join(apppath, "static") + string(path.Separator)) + os.Mkdir(path.Join(apppath, "static", "js"), 0755) + fmt.Println(path.Join(apppath, "static", "js") + string(path.Separator)) + os.Mkdir(path.Join(apppath, "static", "css"), 0755) + fmt.Println(path.Join(apppath, "static", "css") + string(path.Separator)) + os.Mkdir(path.Join(apppath, "static", "img"), 0755) + fmt.Println(path.Join(apppath, "static", "img") + string(path.Separator)) + fmt.Println(path.Join(apppath, "views") + string(path.Separator)) + os.Mkdir(path.Join(apppath, "views"), 0755) + fmt.Println(path.Join(apppath, "conf", "app.conf")) + writetofile(path.Join(apppath, "conf", "app.conf"), strings.Replace(appconf, "{{.Appname}}", args[0], -1)) + + fmt.Println(path.Join(apppath, "controllers", "default.go")) + writetofile(path.Join(apppath, "controllers", "default.go"), controllers) + + fmt.Println(path.Join(apppath, "views", "index.tpl")) + writetofile(path.Join(apppath, "views", "index.tpl"), indextpl) + + fmt.Println(path.Join(apppath, "main.go")) + writetofile(path.Join(apppath, "main.go"), strings.Replace(maingo, "{{.Appname}}", strings.Join(strings.Split(apppath[len(appsrcpath)+1:], string(path.Separator)), string(path.Separator)), -1)) + + fmt.Println("[SUCC] New application successfully created!") +} + +var appconf = `appname = {{.Appname}} +httpport = 8080 +runmode = dev +` + +var maingo = `package main + +import ( + "{{.Appname}}/controllers" + "github.com/astaxie/beego" +) + +func main() { + beego.Router("/", &controllers.MainController{}) + beego.Run() +} + +` +var controllers = `package controllers + +import ( + "github.com/astaxie/beego" +) + +type MainController struct { + beego.Controller +} + +func (this *MainController) Get() { + this.Data["Website"] = "beego.me" + this.Data["Email"] = "astaxie@gmail.com" + this.TplNames = "index.tpl" +} +` + +var indextpl = ` + + + + Beego + + + + + + +
+
+
+
+

Welcome to Beego!

+

+ Beego is a simple & powerful Go web framework which is inspired by tornado and sinatra. +
+ Official website: {{.Website}} +
+ Contact me: {{.Email}} +

+
+
+
+
+ + +` + +func writetofile(filename, content string) { + f, err := os.Create(filename) + if err != nil { + panic(err) + } + defer f.Close() + f.WriteString(content) +}