hooks.go

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