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/vole.git

Write over SSH with a registered key:

git clone ssh://git@rodent.software:2222/vole.git

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

Docs: rewrite the README and organize the guides

520470e19cd906bd6fff987e2d132d793ce56486 · Keenan Nemetz · 16d ago · parent c5902451

Docs: rewrite the README and organize the guides

Replace the long README with a landing page, split feature details into focused guides, and remove the roadmap and spike notes. Update comments that referenced them.

server/pages/pages.go +7−7

@@ -1,8 +1,8 @@
1 1 // Package pages serves a repository's site straight out of its git tree.
2 2 //
3 3 // There is no export step and no build to drift: the site is a branch, a push
4 // moves the tip, and the next request reads the new tree. Two consequences shape
5 // the design, both measured in docs/spikes/tree-serving:
4 // moves the tip, and the next request reads the new tree. Two measurements shape
5 // the design:
6 6 //
7 7 // - Blobs come through a pool of `git cat-file --batch` processes, because one
8 8 // process serialises every read (12.1k req/s vs 24.8k with four).
@@ -33,8 +33,8 @@ import (
33 33
34 34 const (
35 35 // tipTTL is how long a resolved branch tip is trusted. A push is live within
36 // this window, well inside the phase's five-second criterion, and in exchange
37 // git sees one ref read per second per site instead of one per request.
36 // this window, well under five seconds, and in exchange git sees one ref read
37 // per second per site instead of one per request.
38 38 tipTTL = time.Second
39 39 // poolIdle is how long an unused cat-file pool lives. A forge with a hundred
40 40 // repositories should not keep four hundred processes because somebody once
@@ -76,9 +76,9 @@ type poolRef struct {
76 76
77 77 // siteState is everything a request needs to route and authorize, resolved in one
78 78 // place and reused for the memo window. Resolving it means git subprocesses —
79 // `Open` reads the default branch, `ACL` reads a ref — and the Phase 6 benchmark
80 // showed three spawns per request costing ~3.8 ms, forty times the cost of serving
81 // the blob itself.
79 // `Open` reads the default branch, `ACL` reads a ref — and benchmarking showed
80 // three spawns per request costing ~3.8 ms, forty times the cost of serving the
81 // blob itself.
82 82 type siteState struct {
83 83 m *repo.Meta
84 84 public bool