watch projects.list and reload on changes
1 file changed, 36 insertions(+), 1 deletion(-)
changed files
M routes/handler.go → routes/handler.go
@@ -4,9 +4,11 @@ import ( "log" "net/http" "path" + "path/filepath" "strings" "github.com/dimfeld/httptreemux/v5" + "github.com/fsnotify/fsnotify" "go.alanpearce.eu/elgit/config" )@@ -59,7 +61,8 @@ func Handlers(c *config.Config) *httptreemux.TreeMux { mux := httptreemux.New() - projects, err := ReadProjectsList(c) + plist := filepath.Join(c.Repo.Root, "projects.list") + projects, err := ReadProjectsList(plist) if err != nil { log.Fatal(err) }@@ -68,6 +71,38 @@ d := deps{ c, projects, } + + watcher, err := fsnotify.NewWatcher() + if err != nil { + log.Fatal(err) + } + + err = watcher.Add(plist) + if err != nil { + log.Fatal(err) + } + + go func() { + for { + select { + case event, ok := <-watcher.Events: + if !ok { + continue + } + if event.Op.Has(fsnotify.Write) { + d.projects, err = ReadProjectsList(plist) + if err != nil { + log.Println(err) + } + } + case err, ok := <-watcher.Errors: + if !ok { + continue + } + log.Println("error:", err) + } + } + }() mux.NotFoundHandler = func(w http.ResponseWriter, r *http.Request) { d.Write404(w)