diff --git a/bale.go b/bale.go index 03f8b7f..64c275d 100644 --- a/bale.go +++ b/bale.go @@ -54,7 +54,7 @@ func runBale(cmd *Command, args []string) { // Pack and compress data. for _, p := range conf.Bale.Dirs { - if !IsExist(p) { + if !isExist(p) { ColorLog("[WARN] Skipped directory( %s )\n", p) continue } diff --git a/bee.json b/bee.json index 4665137..832c49a 100644 --- a/bee.json +++ b/bee.json @@ -1,7 +1,11 @@ { + "version": 0, + "gopm": { + "enable": false + }, "go_install": false, "watch_ext": [], - "dir_structure":{ + "dir_structure": { "controllers": "", "models": "", "others": [] diff --git a/conf.go b/conf.go new file mode 100644 index 0000000..ab73e9f --- /dev/null +++ b/conf.go @@ -0,0 +1,96 @@ +// Copyright 2013 bee authors +// +// 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 main + +import ( + "encoding/json" + "os" +) + +const CONF_VER = 0 + +var defaultConf = `{ + "version": 0, + "gopm": { + "enable": false, + }, + "go_install": false, + "watch_ext": [], + "dir_structure":{ + "controllers": "", + "models": "", + "others": [] + } +} +` +var conf struct { + Version int + // gopm support + Gopm struct { + Enable bool + } + // Indicates whether execute "go install" before "go build". + GoInstall bool `json:"go_install"` + WatchExt []string `json:"watch_ext"` + DirStruct struct { + Controllers string + Models string + Others []string // Other directories. + } `json:"dir_structure"` + + Bale struct { + Import string + Dirs []string + IngExt []string `json:"ignore_ext"` + } +} + +// loadConfig loads customized configuration. +func loadConfig() error { + f, err := os.Open("bee.json") + if err != nil { + // Use default. + err = json.Unmarshal([]byte(defaultConf), &conf) + if err != nil { + return err + } + } else { + defer f.Close() + ColorLog("[INFO] Detected bee.json\n") + d := json.NewDecoder(f) + err = d.Decode(&conf) + if err != nil { + return err + } + } + + // Check format version. + if conf.Version != CONF_VER { + ColorLog("[WARN] Your bee.json is out-of-date, please update!\n") + ColorLog("[HINT] Compare bee.json under bee source code path and yours\n") + } + + // Set variables. + if len(conf.DirStruct.Controllers) == 0 { + conf.DirStruct.Controllers = "controllers" + } + if len(conf.DirStruct.Models) == 0 { + conf.DirStruct.Models = "models" + } + + // Append watch exts. + watchExts = append(watchExts, conf.WatchExt...) + return nil +} diff --git a/run.go b/run.go index 3749234..9413df8 100644 --- a/run.go +++ b/run.go @@ -15,7 +15,6 @@ package main import ( - "encoding/json" "os" path "path/filepath" "runtime" @@ -44,42 +43,11 @@ when the file has changed bee will auto go build and restart the app `, } -var defaultJson = ` -{ - "go_install": false, - "dir_structure":{ - "controllers": "", - "models": "", - "others": [] - }, - "main_files":{ - "main.go": "", - "others": [] - } -} -` - func init() { cmdRun.Run = runApp } var appname string -var conf struct { - // Indicates whether execute "go install" before "go build". - GoInstall bool `json:"go_install"` - WatchExt []string `json:"watch_ext"` - DirStruct struct { - Controllers string - Models string - Others []string // Other directories. - } `json:"dir_structure"` - - Bale struct { - Import string - Dirs []string - IngExt []string `json:"ignore_ext"` - } -} func runApp(cmd *Command, args []string) { exit := make(chan bool) @@ -96,6 +64,7 @@ func runApp(cmd *Command, args []string) { if err != nil { ColorLog("[ERRO] Fail to parse bee.json[ %s ]\n", err) } + var paths []string paths = append(paths, path.Join(crupath, conf.DirStruct.Controllers), @@ -122,34 +91,3 @@ func runApp(cmd *Command, args []string) { } } } - -// loadConfig loads customized configuration. -func loadConfig() error { - f, err := os.Open("bee.json") - if err != nil { - // Use default. - err = json.Unmarshal([]byte(defaultJson), &conf) - if err != nil { - return err - } - } else { - defer f.Close() - ColorLog("[INFO] Detected bee.json\n") - d := json.NewDecoder(f) - err = d.Decode(&conf) - if err != nil { - return err - } - } - // Set variables. - if len(conf.DirStruct.Controllers) == 0 { - conf.DirStruct.Controllers = "controllers" - } - if len(conf.DirStruct.Models) == 0 { - conf.DirStruct.Models = "models" - } - - // Append watch exts. - watchExts = append(watchExts, conf.WatchExt...) - return nil -} diff --git a/util.go b/util.go index 1a53774..250eee9 100644 --- a/util.go +++ b/util.go @@ -153,7 +153,7 @@ func getColorLevel(level string) string { } // IsExist returns whether a file or directory exists. -func IsExist(path string) bool { +func isExist(path string) bool { _, err := os.Stat(path) return err == nil || os.IsExist(err) } diff --git a/watch.go b/watch.go index 11df0db..211e904 100644 --- a/watch.go +++ b/watch.go @@ -111,18 +111,23 @@ func Autobuild() { path, _ := os.Getwd() os.Chdir(path) + cmdName := "go" + if conf.Gopm.Enable { + cmdName = "gopm" + } + var err error // For applications use full import path like "github.com/.../.." // are able to use "go install" to reduce build time. if conf.GoInstall { - icmd := exec.Command("go", "install") + icmd := exec.Command(cmdName, "install") icmd.Stdout = os.Stdout icmd.Stderr = os.Stderr err = icmd.Run() } if err == nil { - bcmd := exec.Command("go", "build") + bcmd := exec.Command(cmdName, "build") bcmd.Stdout = os.Stdout bcmd.Stderr = os.Stderr err = bcmd.Run()