AgeCommit message (Collapse)AuthorLines
Word the blob size and binary errors alikeBryce Kwon-4/+2
The four pages that refuse a blob over max-blob-size each said it in their own way, two of them in lower case, and the blame page ended its binary notice with a full stop no other error carries.
Add stable markup hooks for site themesBryce Kwon-10/+22
Harden the page renderersBryce Kwon-22/+39
Clean up the whole treeBryce Kwon-53/+33
Trim the comments and dead code across the treeBryce Kwon-10/+5
Fold `enable-stats` back into `max-stats`Bryce Kwon-1/+1
A `max-stats` period enables the page again, as it did before v2.2.0, so one key does both jobs.
Use standard HTTP reason phrasesBryce Kwon-7/+7
Fix the submodule rows in the tree listingBryce Kwon-2/+5
A submodule row linked to a path with its trailing slash stripped, was labelled by its path rather than its entry name, shared the name's element with its hash, claimed a size of zero and offered a blame button that cannot work on a gitlink.
Remove the obsolete summary attributesBryce Kwon-4/+4
Treat text blobs with stray nuls as binaryBryce Kwon-1/+4
Give the stub and tag rows their full widthBryce Kwon-3/+3
Make the breakpoints hide and restack, not resizeBryce Kwon-3/+3
Nothing changes size across a breakpoint any more. On a phone the tree listing keeps name and size, the diff and stat option panels hide, the owner line leaves the stacked masthead, and the search, switcher and authors wait until they fit.
Restyle the sources and fix the audit's findingsBryce Kwon-173/+208
Emit generated runs in batches, not a write eachBryce Kwon-6/+17
Build each hex dump row in one bufferBryce Kwon-9/+20
Settle the names, types and layout of the sourcesBryce Kwon-6/+8
Reorganize the tree into vendor/ and custom/Bryce Kwon-1/+1
Stream the tree line numbers instead of bufferingBryce Kwon-5/+2
Gate the stats page and add a language breakdownBryce Kwon-1/+1
`max-stats` only bounds the selectable periods now and no longer doubles as the enable switch. The tree walk runs before the history walk on purpose. Releasing commit memory while walking history resets each commit slab index, and a commit graph lookup afterwards would read another commit slot and walk the wrong tree. The stats fixture writes a commit graph so the tests cover that path. The history walk bounds the window in process rather than passing a formatted since date to `setup_revisions`, and parses each commit once.
Move syntax highlighting to a Lua source filterBryce Kwon-8/+4
Point the fork's links and credits at itselfBryce Kwon-1/+1
AUTHORS now records the upstream developers as the project's history rather than as maintainers of the fork.
Build the tree line gutter in one bufferBryce Kwon-2/+5
The line-number gutter did one allocation and one write per line.
Check `max-blob-size` before reading, default 10 MBBryce Kwon-7/+8
Only the tree view honoured the limit, and only after loading the whole object. The raw blob, plain, blame and readme paths now check the size before reading, and the default moves from unlimited to 10 MB so a fresh install never buffers a huge object whole, with zero still the opt-out.
Harden the blob view error pathsBryce Kwon-7/+15
A blob requested by ref with an unknown path fell through to the commit object and was served with a 200 instead of a 404, two error pages passed a null pointer to a %s format when the request carried no object id, and the error pages left the layout open.
Cast signed chars before ctype callsBryce Kwon-2/+2
A plain char is undefined in the ctype functions for negative values, which a high byte produces wherever char is signed.
Add built-in syntax highlightingBryce Kwon-1/+8
Highlighting previously required a source filter shelling out to something like Pygments. A configured source filter still takes precedence, every character is preserved so the line gutter stays aligned, and large files are skipped.
Add `enable-tree-group-dirs` to list dirs firstBryce Kwon-5/+60
Reorganize into source, assets and librariesBryce Kwon-0/+407
The C sources move to source/, the served files to assets/, the bundled Git submodule to libraries/git and the filter scripts to extensions/. Everything the build generates now lands in build/, so a clean is a single remove and the tree stays clean.