//! One commit at `/git/{owner}/{repo}/commit/{oid}`, described. //! //! Replaces `templates/pages/git/commit.html`, `GitCommitDetailTemplate` and //! the three partials that page and nothing else included: //! `git_notes_edit.html`, `git_annotations_panel.html` and //! `git_annotation_edit.html`. `git_signature.html` stays, because the tags //! page still writes it; [`signature`] is the described half of the same //! ruling. //! //! Served from `routes::git::browsing::commit_detail_page` rather than as a //! quasi route, for [`crate::quasi::git_blame`]'s reason one address over: the //! browse tree is registered as a whole and the neighbouring addresses carry //! wildcard segments, so the two pages are built the same way rather than one //! each. //! //! # The diff carries the ruling //! //! `19d7602d` added [`layout::Change`] and `Row::changed` for this page, and //! this is their only consumer. A diff row says which side it is on and the //! renderer decides what that looks like: a tint in a webview, a leading sign //! in a terminal. What the description does not do is spell `+` or `-` into the //! content, which is what the shipped `origin` column was -- a sign drawn as //! data, unavailable to a renderer that wanted to say it another way and //! duplicated by the tint beside it. //! //! Diff content stops being markup here too, exactly as blame's did: //! `git::diff_commit` escaped each line on the way out, and the renderer //! escapes now. //! //! # The write forms carry no hidden token //! //! `crate::shell::described` sends `X-CSRF-Token` on every request the document //! makes, and `crate::csrf` reads that header before it looks for a `_csrf` //! field. The hidden inputs existed because these were vanilla `