blob: a06d16f73b101f9e548ed57408cdc0a34dbd0ef2 [file] [log] [blame]
giof55ab362025-04-11 17:48:17 +04001package main
2
3import (
4 "crypto/sha256"
5 "flag"
6 "fmt"
7 "io"
8 "os"
9 "syscall"
10 "time"
11)
12
13var watch = flag.String("watch", "", "Path to watch")
14var reload = flag.String("reload", "", "Path to PID file")
15
16func check(err error) {
17 if err != nil {
18 panic(err)
19 }
20}
21
22func main() {
23 flag.Parse()
24 var prev string
25 for {
26 cur := func() string {
27 inp, err := os.Open(*watch)
28 check(err)
29 defer inp.Close()
30 h := sha256.New()
31 _, err = io.Copy(h, inp)
32 check(err)
33 return string(h.Sum(nil))
34 }()
35 if prev == "" {
36 prev = cur
37 continue
38 }
39 if prev != cur {
40 prev = cur
41 fmt.Println("changed")
42 pid := func() int {
43 inp, err := os.Open(*reload)
44 // TODO(gio): check error type
45 if err != nil {
46 return -1
47 }
48 defer inp.Close()
49 var ret int
50 _, err = fmt.Fscanf(inp, "%d", &ret)
51 check(err)
52 return ret
53 }()
54 if pid != -1 {
55 p, err := os.FindProcess(pid)
56 check(err)
57 fmt.Println("found process")
58 fmt.Println("%+v\n", p)
59 // TODO(gio): take signal value from flags
60 check(p.Signal(syscall.SIGKILL))
61 fmt.Println("sent signall")
62 }
63 } else {
64 fmt.Println("no change")
65 }
66 time.Sleep(5 * time.Second)
67 }
68}