ソースを参照

support restarting only on file changes.

Lucas Stadler 11 年 前
コミット
3cee675480
共有1 個のファイルを変更した8 個の追加6 個の削除を含む
  1. 8 6
      go/qst.go

+ 8 - 6
go/qst.go

39
}
39
}
40
40
41
var delay = flag.Duration("delay", 1*time.Second, "time to wait until restart")
41
var delay = flag.Duration("delay", 1*time.Second, "time to wait until restart")
42
var autoRestart = flag.Bool("autorestart", true, "restart after command exists")
42
43
43
func main() {
44
func main() {
44
	log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
45
	log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
68
		log.Fatalf("error: no mapping found for `%s'", file)
69
		log.Fatalf("error: no mapping found for `%s'", file)
69
	}
70
	}
70
71
71
	runner := MakeRunner(fn(file))
72
	runner := &Runner{nil, fn(file), false, *autoRestart}
72
	go runCmd(file, runner)
73
	go runCmd(file, runner)
73
74
74
	c := make(chan os.Signal, 1)
75
	c := make(chan os.Signal, 1)
105
	restart  bool
106
	restart  bool
106
}
107
}
107
108
108
func MakeRunner(shellCmd string) *Runner {
109
	return &Runner{nil, shellCmd, false, true}
110
}
111
112
func (r *Runner) Start() error {
109
func (r *Runner) Start() error {
113
	if r.started {
110
	if r.started {
114
		return errors.New("already started, use Restart()")
111
		return errors.New("already started, use Restart()")
125
122
126
			time.Sleep(*delay)
123
			time.Sleep(*delay)
127
			if !r.restart {
124
			if !r.restart {
125
				r.started = false
128
				break
126
				break
129
			}
127
			}
130
		}
128
		}
142
}
140
}
143
141
144
func (r *Runner) Restart() error {
142
func (r *Runner) Restart() error {
145
	return r.Kill()
143
	if r.started {
144
		return r.Kill()
145
	} else {
146
		return r.Start()
147
	}
146
}
148
}
147
149
148
func (r *Runner) Stop() {
150
func (r *Runner) Stop() {