knotserver/internal: calculate language breakdown on push #315

merged
opened by oppi.li targeting master from push-snktzuwttuvu
Changed files
+34 -9
knotserver
+30 -7
knotserver/git/post_receive.go
···
import (
"bufio"
+
"context"
"fmt"
"io"
"strings"
+
"time"
"tangled.sh/tangled.sh/core/api/tangled"
···
}
type RefUpdateMeta struct {
-
CommitCount CommitCount
-
IsDefaultRef bool
+
CommitCount CommitCount
+
IsDefaultRef bool
+
LangBreakdown LangBreakdown
}
type CommitCount struct {
···
func (g *GitRepo) RefUpdateMeta(line PostReceiveLine) RefUpdateMeta {
commitCount, err := g.newCommitCount(line)
if err != nil {
-
// TODO: non-fatal, log this
+
// TODO: log this
}
isDefaultRef, err := g.isDefaultBranch(line)
if err != nil {
-
// TODO: non-fatal, log this
+
// TODO: log this
+
}
+
+
ctx, cancel := context.WithTimeout(context.Background(), time.Second*2)
+
defer cancel()
+
breakdown, err := g.AnalyzeLanguages(ctx)
+
if err != nil {
+
// TODO: log this
}
return RefUpdateMeta{
-
CommitCount: commitCount,
-
IsDefaultRef: isDefaultRef,
+
CommitCount: commitCount,
+
IsDefaultRef: isDefaultRef,
+
LangBreakdown: breakdown,
}
}
···
})
}
+
var langs []*tangled.GitRefUpdate_Pair
+
for lang, size := range m.LangBreakdown {
+
langs = append(langs, &tangled.GitRefUpdate_Pair{
+
Lang: lang,
+
Size: size,
+
})
+
}
+
langBreakdown := &tangled.GitRefUpdate_Meta_LangBreakdown{
+
Inputs: langs,
+
}
+
return tangled.GitRefUpdate_Meta{
CommitCount: &tangled.GitRefUpdate_Meta_CommitCount{
ByEmail: byEmail,
},
-
IsDefaultRef: m.IsDefaultRef,
+
IsDefaultRef: m.IsDefaultRef,
+
LangBreakdown: langBreakdown,
}
}
+4 -2
knotserver/internal.go
···
import (
"context"
"encoding/json"
+
"fmt"
"log/slog"
"net/http"
"path/filepath"
···
return err
}
-
gr, err := git.PlainOpen(repoPath)
+
gr, err := git.Open(repoPath, line.Ref)
if err != nil {
-
return err
+
return fmt.Errorf("failed to open git repo at ref %s: %w", line.Ref, err)
}
meta := gr.RefUpdateMeta(line)
+
metaRecord := meta.AsRecord()
refUpdate := tangled.GitRefUpdate{