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.
Stop repeating the index check and the history summaries
73ec800beafe53eea186fbc1cebec3306cc49da0 · Keenan Nemetz · 10d ago · parent 5d440e37
Stop repeating the index check and the history summaries The request memo covered the repository, the open counts and the change list, but two more reads were repeated: - The index refresh (issue rows, filters, `#42` numbers) ran on every surface that shows one, and each run started by resolving the metadata ref. A page calls it from the header, the number lookup and its own view, so it now happens once per request, and the resolved commit is shared with the change-request read instead of being resolved twice. - The overview walked the repository's whole history on every load: `shortlog` for contributors, `rev-list --count` for the code page's commit count, and the tree grouping for languages. Those are properties of a commit, and a commit id is content-addressed, so they cannot go stale: they are remembered by commit id in a bounded per-process cache that evicts oldest-first. On the fixture (30 change requests, 30 issues) the overview drops from 19 git calls to 9 on a repeated load, the code page from 12 to 11, and every page loses one `rev-parse` for the metadata ref.
metadata/requests.go +7
| @@ -132,6 +132,13 @@ func LoadRequests(g *git.Repo, ref string) ([]*Request, error) { | |||
| 132 | 132 | if err != nil { | |
| 133 | 133 | return nil, err | |
| 134 | 134 | } | |
| 135 | return LoadRequestsAt(g, commit) | ||
| 136 | } | ||
| 137 | |||
| 138 | // LoadRequestsAt reads the change requests at a commit that has already been | ||
| 139 | // resolved. It exists so a caller that needs both the index and the request | ||
| 140 | // list resolves the metadata ref once, not once per reader. | ||
| 141 | func LoadRequestsAt(g *git.Repo, commit string) ([]*Request, error) { | ||
| 135 | 142 | if commit == "" { | |
| 136 | 143 | return nil, nil | |
| 137 | 144 | } | |