all repos — homestead @ e4bdf0dd0740c21e89dd42413b7bc76da381fd37

Code for my website

generalise file watcher to an UpdateListener

Alan Pearce
commit

e4bdf0dd0740c21e89dd42413b7bc76da381fd37

parent

7a987dac4c9c4c0fa2bc8484566f08bdd6d82f56

1 file changed, 36 insertions(+), 39 deletions(-)

changed files
M internal/website/website.gointernal/website/website.go
@@ -13,8 +13,8 @@ ihttp "go.alanpearce.eu/website/internal/http"
"go.alanpearce.eu/website/internal/server" "go.alanpearce.eu/website/internal/storage" "go.alanpearce.eu/website/internal/storage/sqlite" + "go.alanpearce.eu/website/internal/update" "go.alanpearce.eu/website/internal/vcs" - "go.alanpearce.eu/website/internal/watcher" "go.alanpearce.eu/website/templates" "go.alanpearce.eu/x/log"
@@ -110,51 +110,48 @@ return nil, errors.WithMessage(err, "could not build site")
} if opts.Development { - fw, err := watcher.New(log.Named("watcher")) + fw, err := update.NewFileWatcher( + log.Named("watcher"), + opts.Source, + "templates", + ) if err != nil { - return nil, errors.WithMessage(err, "could not create file watcher") - } - err = fw.AddRecursive(opts.Source) - if err != nil { - return nil, errors.WithMessage( - err, - "could not add directory to file watcher", - ) - } - err = fw.AddRecursive("templates") - if err != nil { - return nil, errors.WithMessage( - err, - "could not add templates directory to file watcher", - ) + return nil, errors.WithMessage(err, "could not create file listener") } - go fw.Start(func(filename string) { - log.Info("rebuilding site", "changed_file", filename) - db.Close() - db, err = sqlite.OpenDB(opts.DBPath) + go func(events chan update.Event, errs chan error) { + err := fw.Wait(events, errs) if err != nil { - log.Error("error opening database", "error", err) + log.Panic("could not start update listener", "error", err) } - website.reader, err = sqlite.NewReader(db, log.Named("reader")) - if err != nil { - log.Error("error creating sqlite reader", "error", err) - } - builderOptions.Storage, err = sqlite.NewWriter( - db, - log.Named("storage"), - &sqlite.Options{}, - ) - if err != nil { - log.Error("error creating sqlite writer", "error", err) - } + for event := range events { + filename := event.FileEvents[0].Name + log.Info("rebuilding site", "changed_file", filename) + db.Close() + db, err = sqlite.OpenDB(opts.DBPath) + if err != nil { + log.Error("error opening database", "error", err) + } + website.reader, err = sqlite.NewReader(db, log.Named("reader")) + if err != nil { + log.Error("error creating sqlite reader", "error", err) + } + builderOptions.Storage, err = sqlite.NewWriter( + db, + log.Named("storage"), + &sqlite.Options{}, + ) + if err != nil { + log.Error("error creating sqlite writer", "error", err) + } - err := rebuild(builderOptions, cfg, log) - if err != nil { - log.Error("error rebuilding site", "error", err) + err := rebuild(builderOptions, cfg, log) + if err != nil { + log.Error("error rebuilding site", "error", err) + } + opts.LiveReload.Reload() } - opts.LiveReload.Reload() - }) + }(make(chan update.Event, 1), make(chan error, 1)) } website.reader, err = sqlite.NewReader(db, log.Named("reader"))