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.

Phase 7 slice 1: review on the web, so approving does not start with a clone

78912785b00227cffe3f8fb26b057cd60159a6b4 · Keenan Nemetz · 17d ago · parent 9bea7f11

Phase 7 slice 1: review on the web, so approving does not start with a clone

Phase 7 is re-scoped: signing is deferred (the SSH handshake already establishes
who pushed, and there is no third-party verifier here), and the phase is now about
the experience of using the forge.

- GET /r/<repo>/commit/<sha>: a commit's metadata and the patch it introduced,
  per-file hunks with line numbers; the commit list links to it
- change requests show the same diff, computed three-dot: a review is what the
  branch adds since it diverged, not every commit main gained meanwhile
- diffs are capped at 512 KiB and labelled when cut, binary files are named
  rather than faked, and every line is escaped (a <script> line is a test)
- the repository README renders on its home page and markdown blobs render as
  markdown, through the sanitiser issues already use

internal/server/server.go +1

@@ -141,6 +141,7 @@ func (s *Server) routes() *http.ServeMux {
141 141 mux.HandleFunc("GET /r/{name}/blob/{ref}/{path...}", w.Blob)
142 142 mux.HandleFunc("GET /r/{name}/raw/{ref}/{path...}", w.Raw)
143 143 mux.HandleFunc("GET /r/{name}/commits/{ref}", w.Commits)
144 mux.HandleFunc("GET /r/{name}/commit/{sha}", w.CommitView)
144 145 mux.HandleFunc("GET /r/{name}/issues", w.Issues)
145 146 mux.HandleFunc("GET /r/{name}/issues/{id}", w.IssueView)
146 147 mux.HandleFunc("GET /r/{name}/requests", w.Requests)