hooks.go

 1package sqlite
 2
 3import (
 4	"io"
 5	"sync"
 6
 7	"github.com/charmbracelet/log"
 8	"github.com/charmbracelet/soft-serve/server/backend"
 9)
10
11// PostReceive is called by the git post-receive hook.
12//
13// It implements Hooks.
14func (d *SqliteBackend) PostReceive(stdout io.Writer, stderr io.Writer, repo string, args []backend.HookArg) {
15	log.WithPrefix("backend.sqlite.hooks").Debug("post-receive hook called", "repo", repo, "args", args)
16}
17
18// PreReceive is called by the git pre-receive hook.
19//
20// It implements Hooks.
21func (d *SqliteBackend) PreReceive(stdout io.Writer, stderr io.Writer, repo string, args []backend.HookArg) {
22	log.WithPrefix("backend.sqlite.hooks").Debug("pre-receive hook called", "repo", repo, "args", args)
23}
24
25// Update is called by the git update hook.
26//
27// It implements Hooks.
28func (d *SqliteBackend) Update(stdout io.Writer, stderr io.Writer, repo string, arg backend.HookArg) {
29	log.WithPrefix("backend.sqlite.hooks").Debug("update hook called", "repo", repo, "arg", arg)
30}
31
32// PostUpdate is called by the git post-update hook.
33//
34// It implements Hooks.
35func (d *SqliteBackend) PostUpdate(stdout io.Writer, stderr io.Writer, repo string, args ...string) {
36	log.WithPrefix("backend.sqlite.hooks").Debug("post-update hook called", "repo", repo, "args", args)
37
38	var wg sync.WaitGroup
39
40	// Update server info
41	wg.Add(1)
42	go func() {
43		defer wg.Done()
44
45		rr, err := d.Repository(repo)
46		if err != nil {
47			log.WithPrefix("backend.sqlite.hooks").Error("error getting repository", "repo", repo, "err", err)
48			return
49		}
50
51		r, err := rr.Open()
52		if err != nil {
53			log.WithPrefix("backend.sqlite.hooks").Error("error opening repository", "repo", repo, "err", err)
54			return
55		}
56
57		if err := r.UpdateServerInfo(); err != nil {
58			log.WithPrefix("backend.sqlite.hooks").Error("error updating server-info", "repo", repo, "err", err)
59			return
60		}
61	}()
62
63	wg.Wait()
64}