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.
Store changes under changes/<ulid>/change.md
b492b557f5cc5633b3dcb21fdbb5e2ad98d0bc16 · Keenan Nemetz · 3d ago · parent 9bce3723
Store changes under changes/<ulid>/change.md The web, the CLI, and the docs call these items changes; only the metadata tree still said requests. Rename the directory and the record file so the format and the product use one word. The tree is a contract, so this is a format change rather than a display change: the top-level layout stays closed, and a request path no longer validates. An existing repository is migrated by rewriting its vole branch, which is an audited admin force-push; the index rebuilds from the new tip and the #N aliases keep their ULIDs because the rewrite preserves commit order. Refs #202 (01M6S3JC3Y2KA6EFJK6APX7A1T).
forge/index/refresh.go +3−3
| @@ -183,7 +183,7 @@ func (s *Store) IndexRepo(m *repo.Meta) error { | |||
| 183 | 183 | func (s *Store) indexFrom(m *repo.Meta, from, to string) error { | |
| 184 | 184 | g := m.Git() | |
| 185 | 185 | changes, err := g.DiffStatusPaths(from, to, | |
| 186 | metadata.IssuesDir, metadata.RequestsDir, metadata.ReleasesDir) | ||
| 186 | metadata.IssuesDir, metadata.ChangesDir, metadata.ReleasesDir) | ||
| 187 | 187 | if err != nil { | |
| 188 | 188 | return err | |
| 189 | 189 | } | |
| @@ -216,7 +216,7 @@ func (s *Store) indexFrom(m *repo.Meta, from, to string) error { | |||
| 216 | 216 | if id, ok := metadata.IssueIDFromPath(path); ok { | |
| 217 | 217 | issueIDs[id] = true | |
| 218 | 218 | } | |
| 219 | case strings.HasPrefix(path, metadata.RequestsDir+"/"): | ||
| 219 | case strings.HasPrefix(path, metadata.ChangesDir+"/"): | ||
| 220 | 220 | if id, ok := metadata.RequestIDFromPath(path); ok { | |
| 221 | 221 | requestIDs[id] = true | |
| 222 | 222 | } | |
| @@ -276,7 +276,7 @@ func (s *Store) indexFrom(m *repo.Meta, from, to string) error { | |||
| 276 | 276 | // Numbers are historical: a deleted entity keeps its number, and a creation | |
| 277 | 277 | // that was deleted again inside the range still consumed one. The additions | |
| 278 | 278 | // are therefore taken from the commit range, not from the current tree. | |
| 279 | groups, err := g.AddedPathsPerCommit(from+".."+to, metadata.IssuesDir, metadata.RequestsDir) | ||
| 279 | groups, err := g.AddedPathsPerCommit(from+".."+to, metadata.IssuesDir, metadata.ChangesDir) | ||
| 280 | 280 | if err != nil { | |
| 281 | 281 | return err | |
| 282 | 282 | } | |