diff --git a/apiapp.go b/apiapp.go index f3038fa..87ade63 100644 --- a/apiapp.go +++ b/apiapp.go @@ -150,7 +150,7 @@ func (this *ObjectController) Post() { } func (this *ObjectController) Get() { - objectId := this.Ctx.Input.Param[":objectId"] + objectId := this.Ctx.Input.Params[":objectId"] if objectId != "" { ob, err := models.GetOne(objectId) if err != nil { @@ -166,7 +166,7 @@ func (this *ObjectController) Get() { } func (this *ObjectController) Put() { - objectId := this.Ctx.Input.Param[":objectId"] + objectId := this.Ctx.Input.Params[":objectId"] var ob models.Object json.Unmarshal(this.Ctx.Input.RequestBody, &ob) @@ -180,7 +180,7 @@ func (this *ObjectController) Put() { } func (this *ObjectController) Delete() { - objectId := this.Ctx.Input.Param[":objectId"] + objectId := this.Ctx.Input.Params[":objectId"] models.Delete(objectId) this.Data["json"] = "delete success!" this.ServeJson() diff --git a/conf.go b/conf.go index 77e242f..e78dc41 100644 --- a/conf.go +++ b/conf.go @@ -40,7 +40,8 @@ var conf struct { Version int // gopm support Gopm struct { - Enable bool + Enable bool + Install bool } // Indicates whether execute "go install" before "go build". GoInstall bool `json:"go_install"` diff --git a/pack.go b/pack.go index 8ea2c32..72b0599 100644 --- a/pack.go +++ b/pack.go @@ -46,7 +46,7 @@ compress an beego project -ba additional args of go build -o compressed file output dir. default use current path -f format. [ tar.gz / zip ]. default tar.gz. note: zip doesn't support embed symlink, skip it --exp path exclude prefix +-exp path exclude prefix. default: . -exs path exclude suffix. default: .go:.DS_Store:.tmp all path use : as separator -fs follow symlink. default false @@ -72,7 +72,7 @@ var ( func init() { fs := flag.NewFlagSet("pack", flag.ContinueOnError) fs.StringVar(&appPath, "p", "", "") - fs.StringVar(&excludeP, "exp", "", "") + fs.StringVar(&excludeP, "exp", ".", "") fs.StringVar(&excludeS, "exs", ".go:.DS_Store:.tmp", "") fs.StringVar(&outputP, "o", "", "") fs.BoolVar(&build, "b", true, "") diff --git a/watch.go b/watch.go index 2f4ae67..e03ce48 100644 --- a/watch.go +++ b/watch.go @@ -15,6 +15,7 @@ package main import ( + "bytes" "fmt" "os" "os/exec" @@ -27,9 +28,10 @@ import ( ) var ( - cmd *exec.Cmd - state sync.Mutex - eventTime = make(map[string]int64) + cmd *exec.Cmd + state sync.Mutex + eventTime = make(map[string]int64) + buildPeriod time.Time ) func NewWatcher(paths []string) { @@ -53,6 +55,12 @@ func NewWatcher(paths []string) { continue } + // Prevent duplicated builds. + if buildPeriod.Add(1 * time.Second).After(time.Now()) { + continue + } + buildPeriod = time.Now() + mt := getFileModTime(e.Name) if t := eventTime[e.Name]; mt == t { ColorLog("[SKIP] # %s #\n", e.String()) @@ -69,8 +77,6 @@ func NewWatcher(paths []string) { ColorLog("[WARN] %s\n", err.Error()) // No need to exit here } } - - time.Sleep(500 * time.Millisecond) }() ColorLog("[INFO] Initializing watcher...\n") @@ -120,11 +126,26 @@ func Autobuild() { 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(cmdName, "install") - icmd.Stdout = os.Stdout - icmd.Stderr = os.Stderr + if conf.GoInstall || conf.Gopm.Install { + icmd := exec.Command("go", "list", "./...") + buf := bytes.NewBuffer([]byte("")) + icmd.Stdout = buf err = icmd.Run() + if err == nil { + list := strings.Split(buf.String(), "\n")[1:] + for _, pkg := range list { + if len(pkg) == 0 { + continue + } + icmd = exec.Command(cmdName, "install", pkg) + icmd.Stdout = os.Stdout + icmd.Stderr = os.Stderr + err = icmd.Run() + if err != nil { + break + } + } + } } if err == nil { @@ -132,17 +153,11 @@ func Autobuild() { if runtime.GOOS == "windows" { appName += ".exe" } - binPath := GetGOPATHs()[0] + "/bin/" + appName - if conf.GoInstall && isExist(binPath) { - os.Rename(binPath, appName) - ColorLog("[INFO] Build command reduced\n") - } else { - bcmd := exec.Command(cmdName, "build") - bcmd.Stdout = os.Stdout - bcmd.Stderr = os.Stderr - err = bcmd.Run() - } + bcmd := exec.Command(cmdName, "build") + bcmd.Stdout = os.Stdout + bcmd.Stderr = os.Stderr + err = bcmd.Run() } if err != nil { @@ -156,11 +171,14 @@ func Autobuild() { func Kill() { defer func() { if e := recover(); e != nil { - fmt.Println("Kill -> ", e) + fmt.Println("Kill.recover -> ", e) } }() if cmd != nil && cmd.Process != nil { - cmd.Process.Kill() + err := cmd.Process.Kill() + if err != nil { + fmt.Println("Kill -> ", err) + } } }