Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/git/vole.git

Write over SSH with a registered key:

git clone ssh://git@0.0.0.0:2222/vole.git

A free and open-source forge that lives in your Git repo.

Code

392 commit(s) on main

Merge change request 01M70WES5ZZDJ6RP226WB11BBZ: Let people rename and remove their own passkeys keenan · 1h ago 4b8c9e1d
history blame raw 2.4 KiB
1package index
2
3// The head summary is what the landing card shows: the default branch tip and
4// the language it is mostly made of. It is written when a push lands and when a
5// rebuild runs, so a page read does not start git.
6
7import (
8 "testing"
9
10 "rodent.software/vole/core/git"
11)
12
13func seedHead(t *testing.T, g *git.Repo, files map[string][]byte) string {
14 t.Helper()
15 commit, err := git.CommitFiles(g, "refs/heads/main", func(f map[string][]byte) error {
16 for path, body := range files {
17 f[path] = body
18 }
19 return nil
20 }, "the first commit", "keenan")
21 if err != nil {
22 t.Fatal(err)
23 }
24 return commit
25}
26
27func TestRefreshHeadRecordsTheDefaultBranch(t *testing.T) {
28 t.Parallel()
29 s, m, g := incrementalRepo(t)
30 m.DefaultBranch = "main"
31 commit := seedHead(t, g, map[string][]byte{
32 "main.go": []byte("package main\n"),
33 "README.md": []byte("readme\n"),
34 })
35 if _, err := s.RefreshHead(m); err != nil {
36 t.Fatal(err)
37 }
38 e, err := s.Get("demo")
39 if err != nil {
40 t.Fatal(err)
41 }
42 if e.HeadSHA != commit || e.HeadSubject != "the first commit" || e.HeadAuthor != "keenan" {
43 t.Fatalf("head summary = %+v, want %s / the first commit / keenan", e, commit)
44 }
45 if e.HeadWhen == 0 {
46 t.Fatalf("head summary has no time: %+v", e)
47 }
48 if e.Language != "Go" || e.LangClass != "lang-go" {
49 t.Fatalf("language = %q (%q), want Go (lang-go)", e.Language, e.LangClass)
50 }
51}
52
53func TestRefreshHeadClearsADeletedBranch(t *testing.T) {
54 t.Parallel()
55 s, m, g := incrementalRepo(t)
56 m.DefaultBranch = "main"
57 seedHead(t, g, map[string][]byte{"main.go": []byte("package main\n")})
58 if _, err := s.RefreshHead(m); err != nil {
59 t.Fatal(err)
60 }
61 if err := g.DeleteRef("refs/heads/main"); err != nil {
62 t.Fatal(err)
63 }
64 if _, err := s.RefreshHead(m); err != nil {
65 t.Fatal(err)
66 }
67 e, err := s.Get("demo")
68 if err != nil {
69 t.Fatal(err)
70 }
71 if e.HeadSHA != "" || e.Language != "" || e.LangClass != "" {
72 t.Fatalf("deleted branch left a head summary: %+v", e)
73 }
74}
75
76func TestIndexRepoRestoresTheHeadSummary(t *testing.T) {
77 t.Parallel()
78 s, m, g := incrementalRepo(t)
79 m.DefaultBranch = "main"
80 commit := seedHead(t, g, map[string][]byte{"main.go": []byte("package main\n")})
81 if _, err := s.db.Exec(`UPDATE repos SET head_sha='' WHERE id=?`, m.ID); err != nil {
82 t.Fatal(err)
83 }
84 if err := s.IndexRepo(m); err != nil {
85 t.Fatal(err)
86 }
87 e, err := s.Get("demo")
88 if err != nil {
89 t.Fatal(err)
90 }
91 if e.HeadSHA != commit || e.Language != "Go" {
92 t.Fatalf("rebuilt head summary = %+v", e)
93 }
94}
95