AgeCommit message (Collapse)AuthorLines
Let a keyboard scroll the stats tableBryce Kwon-0/+6
It scrolls sideways like the hex dump, with nothing inside a keyboard can reach, so it takes focus and the shared focus ring the same way.
Name a pinned commit with the page in the titleBryce Kwon-0/+13
Let a keyboard scroll the hex dumpBryce Kwon-1/+10
Chrome and Firefox already let an overflowing box take focus, with their own ring, but WebKit does not. The table takes focus on a mouse click as well, where focus-visible keeps the ring off.
Read the file and diff tables as layoutBryce Kwon-0/+12
The file view's table only sets the line numbers beside the code, and the unified diff's is a single cell holding every file.
Read the login form table as layoutBryce Kwon-0/+1
Say which index column is sortedBryce Kwon-0/+13
Put a Lua filter's print output where it runsBryce Kwon-0/+20
LuaJIT and Lua 5.1 leave print's line in stdio's buffer until cgit exits, after the end of the page.
Report a snapshot format name that matches nothingBryce Kwon-0/+19
Answer an empty repository's feed with a feedBryce Kwon-0/+19
Keep a repository's own settings in a cached scanBryce Kwon-0/+47
A scanned repository is read back from the cached list under the global settings, so a setting that only differed from them by being off, or by naming the default value, came back as the global one. branch-sort was written only for age, per-path module links not at all, and a filter a repository turned off left no line behind. Writing an empty value for a filter turned off makes the list depend on whether each global filter is set, so the scan key names that too.
Keep the placeholder out of a cached scanBryce Kwon-0/+12
The cached list wrote "[no description]" like any other description, so once read back it no longer counted as the placeholder and became the meta description of every repository without one. Repositories read back from the list are also marked as having had their description file read, since the scan already did, so the index does not open those files again on every request.
Leave the scan uncached with a negative cache-sizeBryce Kwon-0/+15
The page cache counts a cache-size of 0 or less as off, but scan-path cached its list for any value other than 0, so a negative one still wrote a list into cache-root.
Name a missing Lua module in the error logBryce Kwon-5/+25
Log failed loginsBryce Kwon-0/+7
The login posts outside any repository, so the log line names the repository by the page its signed way back leads to.
Say that logging in needs httpsBryce Kwon-1/+12
Only HTTPS=on counts, the same test cgit makes before it writes an https link of its own.
Tell a signed-in visitor they have no accessBryce Kwon-0/+7
Say when logins are unavailableBryce Kwon-3/+40
The way back was signed part way through the form, so while the secret's directory did not exist, or a library was missing, cgit's error landed inside the hidden input and the page broke off there with no fields.
Keep counting across a split ordered listBryce Kwon-0/+7
Keep the login page out of search indexesBryce Kwon-0/+14
Keep a protected repository's header to itselfBryce Kwon-0/+28
The login page stands in for any page of the repository, so it named the description and owner of one the visitor may not see, including one hidden from the index. The site's own description fills the line, as on the index, so the header keeps its height.
Name the logo after the siteBryce Kwon-0/+7
Head the tag table's column for what it holdsBryce Kwon-0/+13
Say when a log search matches nothingBryce Kwon-0/+10
Answer a submodule path with the submoduleBryce Kwon-0/+9
The tree page read the gitlink's commit as a blob, which outside the repository is a bad object id and inside it is the commit's raw text.
Say when nothing matches a mistyped urlBryce Kwon-0/+11
Lead an error page's title with the errorBryce Kwon-0/+13
The config error page had a title of its own, in the reverse order, and now takes the same one as any other 404, since its message already says the repository failed to open.
Keep the range in a large diff's patch linkBryce Kwon-0/+11
The link named only id, so for a diff between two commits it led to a patch of the newer one alone, and without an id it lost the branch as well and led to the default branch's tip.
Offer blame only where it worksBryce Kwon-0/+29
The blame page answers 404 for a symlink, since git blames a regular file alone, and it refuses a binary file and one past max-blob-size, yet a tree listing offered blame for all of them, and so did a symlink's own page. Each row already knows its size, and git calls a file binary by its first 8000 bytes alone, which a stream reads without inflating the rest. With blame on, a listing of 2,000 delta-packed files went from about 11 to 15 ms.
Dump only the first 64 KB of a binary fileBryce Kwon-1/+18
Blame the previous revision under its own nameBryce Kwon-0/+21
Lead a blame page's folder crumbs to the treeBryce Kwon-0/+16
Link snapshots of a slash ref by a dashed nameBryce Kwon-0/+19
The snapshot page refuses to work a revision out of a name holding a slash, since that name becomes the top directory of the archive, so every link for a ref like release/2.0 answered 404. The ref now goes in the link as the id, and the archive unpacks into the repository's own prefix, as any snapshot asked for by id does.
Show a renamed file's diff as the renameBryce Kwon-0/+75
A diff limited to the new name cannot see the old one, so the diffstat's link for a renamed file, the commit page reached from that file's log, and the file's rawdiff and patch all showed every line as added. A path the old tree lacks is now diffed across the whole commit with rename detection aimed at it alone, the way git blame looks for a rename, so it is compared with the commit's deleted files and nothing else. Doing it in cgit_diff_tree keeps the log's counts for that commit in step with the page they link to. The rawdiff and patch pages leave the diff to git's own output, so for them that search finds the old name, and both names go into the limit with rename detection on.
Log the path of a repository that will not openBryce Kwon-0/+14
The 404 page names only the repository and nothing reached the log, so a mistyped repo.path left no trace of the path cgit had tried.
Read the description file without repo.descBryce Kwon-1/+28
Only a scanned repository fell back to its description file, so one listed in cgitrc without repo.desc showed "[no description]" however its file read. repo.desc may follow repo.path, so the file is read where a page shows the description, which also spares every other request the reads.
Report a word where cgitrc expects a numberBryce Kwon-0/+36
atoi reads "yes" or "true" as 0, so repo.hide=yes, or cgit.hide true in a scanned repository's git config, silently did nothing. The values keep that meaning, since honouring them now would hide repositories on upgrade, but each one is logged with its file and line.
Report a cgitrc or include that cannot be readBryce Kwon-0/+37
A missing or unreadable cgitrc left only "No repositories found" and an empty log, the commonest first mistake with no trace of its cause. A scanned repository's own cgitrc stays quiet, since most have none.
Keep a scan with a negative ttl for goodBryce Kwon-0/+21
"The cache" promises that a negative ttl never expires, but no age was ever below a negative cache-scan-ttl, so every request started a background rescan.
List scanned repositories in path orderBryce Kwon-0/+27
readdir hands entries back in whatever order the filesystem keeps them, so proj111 could come before proj105 and a section could start twice. section-sort is off by default to keep the order written in cgitrc, and a scan has none to keep.
Key the cached scan on every setting it usesBryce Kwon-3/+19
Two cgitrc files sharing a cache-root read one list, so strict-export and trust-scan-config set in one applied to the other, and a changed setting stayed stale until the list expired. The first request after an upgrade scans again, and the files under the old names are never read.
Drain the about filter in the config testsBryce Kwon-2/+6
Check only what the racy filter tests can promiseBryce Kwon-3/+7
Both tests passed or failed with the order in which cgit and the exec filter happened to run, about one run in four under UBSan.
Find a capitalised extension's lexer againBryce Kwon-5/+12
Scintillua's detect() matches an extension by its case, and the fallback e227d1f dropped had lowercased it, so MAIN.C and SETUP.PY lost their colour. The fake lexer now answers only for the suffixes it knows, as Scintillua does, which is what lets the check see it.
Test a lock won after its file became the slotBryce Kwon-1/+29
Spell side-by-side in the test commentsBryce Kwon-3/+3
Write the remaining config copies with cgitrc_copyBryce Kwon-12/+3
Move the feed link check in with the feed testsBryce Kwon-6/+6
It asks for a log page, and the index never carries a feed link.
Look for the old and new lines in one loopBryce Kwon-11/+4
Write the diff and patch checks as the suite doesBryce Kwon-29/+29
Drop the check for a language breakdown long goneBryce Kwon-4/+0