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.
Record the default branch summary when a push lands
8dc56e4e258dd56e2c20776f80d61dbed4993f31 · Keenan Nemetz · 9d ago · parent 20442b59
Record the default branch summary when a push lands The landing card showed the default branch tip and the language it is mostly made of by running `symbolic-ref`, `rev-parse`, `log -1` and `ls-tree -r` per repository on every home page read. Those facts change only when a push moves the branch, so the push now records them. - `repos` carries head_sha, head_subject, head_author, head_when, language and lang_class, and `Index.Entry` returns them with the rest of the row. - `Store.RefreshHead` recomputes the summary and skips the tree walk when the recorded tip is still the branch tip, so a metadata or tag push costs one rev-parse. It runs from post-receive, from the rebuild, and after the default branch changes in settings. - The language mapping moved to `internal/lang`, shared by the web pages and the summary; `fileClass` and `languageFor` are now one table. - The home cards read the head, language, counts, ACL and newest event time from the index. The home page starts no git process at all; the all-git card builder stays as the fallback for a Web without an index. Load harness at concurrency 4 with three repositories: home goes from 243 to 749 req/s, p50 from 16 ms to 5 ms, and the server runs no git child process for those requests.
forge/index/refresh.go +8−1
| @@ -155,7 +155,14 @@ func (s *Store) IndexRepo(m *repo.Meta) error { | |||
| 155 | 155 | if _, err := tx.Exec(`UPDATE repos SET issues_sha=? WHERE id=?`, commit, m.ID); err != nil { | |
| 156 | 156 | return err | |
| 157 | 157 | } | |
| 158 | return tx.Commit() | ||
| 158 | if err := tx.Commit(); err != nil { | ||
| 159 | return err | ||
| 160 | } | ||
| 161 | // The metadata rebuild is a good moment to recompute the head summary the | ||
| 162 | // landing page reads. A failure leaves the card without a hint, not a broken | ||
| 163 | // index. | ||
| 164 | _ = s.RefreshHead(m) | ||
| 165 | return nil | ||
| 159 | 166 | } | |
| 160 | 167 | ||
| 161 | 168 | // indexFrom applies the difference between two commits to the index. The caller | |