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.
Number issues and change requests for human references
e05f1c48d4ee55635cd7b77889f0545137198106 · Keenan Nemetz · 13d ago · parent 41d1fee9
Number issues and change requests for human references A ULID is an unreadable handle, and the 8-character prefix the list showed is mostly timestamp: this repository's 27 issues shared seven distinct six-character prefixes and two pairs already collided at eight. The part people actually type carried almost no information. Issues and change requests now share one gap-free sequence (#1, #42, ...) derived from the creation order in the metadata branch's history, the way one forge counts both in a single run. The number is not stored. It is the rank of the entity's creation commit, so nothing is written when an entity is created, a repository needs no backfill, the same history gives the same numbers on every clone, and `vole admin index rebuild` reproduces them from git. A ULID stays the identity: paths, front matter, `closes:` and audit entries are unchanged, and data/index.db only caches the mapping so a page render does not walk history. Every id-taking command accepts a number, `#42` links in a body through a kind-agnostic /r/<repo>/n/42 route, and --closes resolves an alias to the ULID before writing. Closes #45
server/web/templates/issues.html +2−2
| @@ -59,7 +59,7 @@ | |||
| 59 | 59 | <td> | |
| 60 | 60 | <a class="row-title" href="/r/{{$.Name}}/issues/{{.ID}}">{{.Title}}</a> | |
| 61 | 61 | <div class="row-meta"> | |
| 62 | <span class="sha">#{{short .ID}}</span> | ||
| 62 | <span class="sha">{{num .Number}}</span> | ||
| 63 | 63 | {{range .Labels}}<span class="label">{{.}}</span>{{end}} | |
| 64 | 64 | {{range .Assignees}}<a class="label" href="/r/{{$.Name}}/issues?assignee={{urlquery .}}">@{{.}}</a>{{end}} | |
| 65 | 65 | </div> | |
| @@ -145,7 +145,7 @@ | |||
| 145 | 145 | <h1>{{.Issue.Title}}</h1> | |
| 146 | 146 | <p class="page-sub"> | |
| 147 | 147 | <span class="state {{.Issue.State}}">{{.Issue.State}}</span> | |
| 148 | · <span class="sha">#{{short .Issue.ID}}</span> | ||
| 148 | · <span class="sha">{{num .Number}}</span> | ||
| 149 | 149 | · opened by {{who .Issue.Author}} {{since .Issue.Created.Unix}} | |
| 150 | 150 | </p> | |
| 151 | 151 | </div> | |