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.

Refresh the issue index from what changed

34a404b394dd9abcce0a67e32e99342c69595413 · Keenan Nemetz · 10d ago · parent fdf2340f

Refresh the issue index from what changed

A page read after a write used to reload every issue and renumber the repository from the whole branch history. Ensure now applies the difference between the indexed commit and the tip: it reloads only changed issues, adds only the numbers the range created, and leaves every other row alone. A rewritten branch or a missing index still falls back to the full rebuild.

The detail page and the browser write handlers now read one issue instead of the whole issue tree. Issue writes no longer re-validate the whole metadata tree after a write the writer already validated; the pre-receive hook still owns that check for pushes.

server/web/writes.go −12

@@ -59,9 +59,6 @@ func (w *Web) CreateIssue(rw http.ResponseWriter, r *http.Request) {
59 59 return
60 60 }
61 61 w.audit("web.issue.create", ctx.Name, m.Name, iss.ID)
62 if problems := metadata.ValidateIssues(m.Git(), metadata.Ref); len(problems) > 0 {
63 w.Logger("web: issue %s left the metadata tree invalid: %v", iss.ID, problems)
64 }
65 62 http.Redirect(rw, r, "/r/"+m.Name+"/issues/"+iss.ID, http.StatusSeeOther)
66 63 }
67 64
@@ -102,9 +99,6 @@ func (w *Web) SetIssueLabels(rw http.ResponseWriter, r *http.Request) {
102 99 return
103 100 }
104 101 w.audit("web.issue.labels", ctx.Name, m.Name, id+" "+strings.Join(labels, ","))
105 if problems := metadata.ValidateIssues(m.Git(), metadata.Ref); len(problems) > 0 {
106 w.Logger("web: issue labels %s left the metadata tree invalid: %v", id, problems)
107 }
108 102 if htmxRequest(r) {
109 103 if updated == nil {
110 104 updated = iss
@@ -157,9 +151,6 @@ func (w *Web) SetIssueAssignees(rw http.ResponseWriter, r *http.Request) {
157 151 return
158 152 }
159 153 w.audit("web.issue.assignees", ctx.Name, m.Name, id+" "+strings.Join(assignees, ","))
160 if problems := metadata.ValidateIssues(m.Git(), metadata.Ref); len(problems) > 0 {
161 w.Logger("web: issue assignees %s left the metadata tree invalid: %v", id, problems)
162 }
163 154 if htmxRequest(r) {
164 155 if updated == nil {
165 156 updated = iss
@@ -334,9 +325,6 @@ func (w *Web) ChangeIssueState(rw http.ResponseWriter, r *http.Request) {
334 325 return
335 326 }
336 327 w.audit("web.issue.state", ctx.Name, m.Name, id+" "+state)
337 if problems := metadata.ValidateIssues(m.Git(), metadata.Ref); len(problems) > 0 {
338 w.Logger("web: issue state %s left the metadata tree invalid: %v", id, problems)
339 }
340 328 http.Redirect(rw, r, "/r/"+m.Name+"/issues/"+id, http.StatusSeeOther)
341 329 }
342 330