Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "flag"
- "fmt"
- "log"
- "os"
- "os/exec"
- "strconv"
- "sync"
- "time"
- )
- type Color string
- const (
- Version = "0.1"
- ColorGreen = "2"
- ColorYellow = "3"
- ColorGray = "7"
- )
- var (
- roIndex int
- )
- func printLog(color Color, args ...interface{}) {
- format := []interface{}{"- \x1b[3" + color + "m[godemon]"}
- format = append(format, args...)
- format = append(format, "\x1b[0m")
- log.Println(format...)
- }
- func startGo(file string, args []string, gwg *sync.WaitGroup, kill *chan bool) {
- params := []string{"run", file}
- params = append(params, args...)
- params = append(params, strconv.Itoa(roIndex))
- roIndex += 1
- printLog(ColorGreen, "starting `"+file+"`")
- cmd := exec.Command("go", params...)
- cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr
- cmd.Start()
- var wg sync.WaitGroup
- wg.Add(1)
- go func() {
- <-*kill
- cmd.Process.Kill() // - убийство
- wg.Done()
- }()
- cmd.Wait()
- close(*kill)
- wg.Wait()
- printLog(ColorGreen, "clean exit - waiting for changes before restart")
- gwg.Done()
- }
- func init() {
- flag.Parse()
- log.SetPrefix("\x1b[3" + ColorGray + "m")
- }
- func main() {
- pattern := *flag.String("w", "**/*.*", "watching glob pattern")
- if len(flag.Args()) == 0 {
- fmt.Println("Usage: godemon gofile [args]\n\n" +
- "See \"godemon --help\" for more.")
- os.Exit(0)
- }
- printLog(ColorYellow, "v"+Version)
- printLog(ColorYellow, "watching:", pattern)
- file := flag.Arg(0) + ".go"
- args := flag.Args()[1:]
- for {
- var wg sync.WaitGroup
- kill := make(chan bool)
- wg.Add(1)
- go startGo(file, args, &wg, &kill)
- time.Sleep(time.Second)
- kill <- true
- wg.Wait()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement