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.

Read one request, or one commit, instead of resolving twice

c9202f7f0ba5904af798e7f55bb91079aa774bf5 · Keenan Nemetz · 10d ago · parent 73ec800b

Read one request, or one commit, instead of resolving twice

The index and the change page both paid for reads they did not need:

- GetRequest read every request on the branch to return one. It now reads
  that request's files.
- The index resolves the metadata commit once and then handed the ref to
  loaders that resolved it again. LoadIssuesAt, LoadNumbersAt and
  LoadRequestAt take the commit they were given.
- Release artifacts get a batched loader: one tree listing and one
  cat-file for the whole set, instead of one process per file per tag.

These are the loaders the index needs to derive its rows from one commit
at a time.

metadata/issues.go +15

@@ -139,6 +139,11 @@ func LoadIssues(g *git.Repo, ref string) ([]*Issue, error) {
139 139 if err != nil {
140 140 return nil, err
141 141 }
142 return LoadIssuesAt(g, commit)
143 }
144
145 // LoadIssuesAt reads every issue at a commit that has already been resolved.
146 func LoadIssuesAt(g *git.Repo, commit string) ([]*Issue, error) {
142 147 if commit == "" {
143 148 return nil, nil
144 149 }
@@ -160,6 +165,16 @@ func LoadIssueAt(g *git.Repo, ref, id string) (*Issue, bool, error) {
160 165 if err != nil {
161 166 return nil, false, err
162 167 }
168 return LoadIssueAtCommit(g, commit, id)
169 }
170
171 // LoadIssueAtCommit reads one issue and its comments at a commit that has
172 // already been resolved. The index has the commit and must not resolve it again
173 // per changed issue.
174 func LoadIssueAtCommit(g *git.Repo, commit, id string) (*Issue, bool, error) {
175 if !voleid.Valid(id) {
176 return nil, false, nil
177 }
163 178 if commit == "" {
164 179 return nil, false, nil
165 180 }