all repos — elgit @ 6620eb3e6bc59b195ca72b3f14f22fbc5c7a4aec

fork of legit: web frontend for git, written in go

watch projects.list and reload on changes

Alan Pearce
commit

6620eb3e6bc59b195ca72b3f14f22fbc5c7a4aec

parent

c541f419c0283487d7244a74899fa2d023b12a07

1 file changed, 36 insertions(+), 1 deletion(-)

changed files
M routes/handler.goroutes/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)