From 3f491e3e8f49f11f964c606ad2d83f33ed3e6044 Mon Sep 17 00:00:00 2001 From: Antonio De Lucreziis Date: Sat, 14 Jan 2023 14:01:37 +0100 Subject: [PATCH] fix: mount only mounts directories if they exist --- NOTES.md | 25 +++++++++++++++++++++++++ cmd/cabret/serve.go | 8 +++++++- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 NOTES.md diff --git a/NOTES.md b/NOTES.md new file mode 100644 index 0000000..9943ee2 --- /dev/null +++ b/NOTES.md @@ -0,0 +1,25 @@ +# Notes + +(new notes at the top) + +## TODO: Incremental Watcher + +The DAG based incremental rebuilding will require a better file watcher that can whats entire directories and automatically recheck build rules when a new file is created. + +```go +type WatchListener func(path string) error + +type Watcher interface { + // OnFileChange will register a file change listener + OnFileChange(l WatchListener) + + // OnFileAdded will register a file creation listener + OnFileAdded(l WatchListener) + + // Watch will register "path" + Watch(path string) error + + // Watch will register files matching "pattern" and all directories along the way for new files + WatchPattern(pattern string) error +} +``` \ No newline at end of file diff --git a/cmd/cabret/serve.go b/cmd/cabret/serve.go index 8ea7578..18c5cfe 100644 --- a/cmd/cabret/serve.go +++ b/cmd/cabret/serve.go @@ -5,6 +5,7 @@ import ( "log" "net" "net/http" + "os" "path/filepath" "strings" "time" @@ -73,7 +74,7 @@ func serve(c serveConfig) error { if event.Has(fsnotify.Write) { log.Printf(`[Watcher] event: %s`, event) - if lastRebuild.Add(50 * time.Millisecond).After(time.Now()) { + if lastRebuild.Add(200 * time.Millisecond).After(time.Now()) { log.Printf(`[Watcher] too fast, skipping`) continue } @@ -144,6 +145,11 @@ func serve(c serveConfig) error { for _, m := range c.mounts { if strings.HasSuffix(m.route, "/") { + s, _ := os.Stat(m.path) + if s == nil || !s.IsDir() { + continue + } + log.Printf(`[FileServer] mounting directory "%s" on "%s"`, m.path, m.route) r.Handle(m.route+"*", http.StripPrefix(m.route, http.FileServer(http.Dir(m.path)))) } else {