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

4 files changed, 41 insertions(+), 4 deletions(-)

changed files
M go.modgo.mod
@@ -8,6 +8,7 @@ github.com/bluekeyes/go-gitdiff v0.8.1
github.com/cyphar/filepath-securejoin v0.4.1 github.com/dimfeld/httptreemux/v5 v5.5.0 github.com/dustin/go-humanize v1.0.1 + github.com/fsnotify/fsnotify v1.9.0 github.com/go-git/go-git/v5 v5.14.0 github.com/microcosm-cc/bluemonday v1.0.27 github.com/russross/blackfriday/v2 v2.1.0
M go.sumgo.sum
@@ -36,6 +36,8 @@ github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o=
github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
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)
M routes/util.goroutes/util.go
@@ -11,7 +11,6 @@ "strings"
securejoin "github.com/cyphar/filepath-securejoin" "github.com/dimfeld/httptreemux/v5" - "go.alanpearce.eu/elgit/config" "go.alanpearce.eu/elgit/data" "go.alanpearce.eu/elgit/git" )
@@ -50,8 +49,8 @@ httptreemux.Clean(name)+".git",
) } -func ReadProjectsList(c *config.Config) ([]string, error) { - content, err := os.ReadFile(filepath.Join(c.Repo.Root, "projects.list")) +func ReadProjectsList(filename string) ([]string, error) { + content, err := os.ReadFile(filename) if err != nil { return nil, err }