diff options
Diffstat (limited to '')
| -rw-r--r-- | CHANGELOG.txt | 203 |
1 file changed, 203 insertions, 0 deletions
diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 67b2670..c14bf3d 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -5,6 +5,209 @@ Notable changes to this fork, newest release first. History before v2.0.0 belongs to upstream cgit and is not covered here. +v2.9.2 (2026-10-25) +------------------- + +A polish release for narrow screens and for the finer details of the pages, +with the summary's columns lined up, a login that says when it failed and a +signed tag's signature folded away. + +Added +..... + +* A wrong username or password brings the login form back with a message + saying so, where it used to come back empty. Both auth filters carry it, an + unknown user is told the same as a wrong password, and the button now sits + under the fields. The README names the hooks, form.login and p.login-error. +* A signed tag's signature, PGP, SSH or X.509, is folded away under the tag's + message in details.signature, rather than printed as part of the message. +* The syntax highlighter colours CSS properties and pseudo-classes, which + Scintillua's css lexer tags with names it had no colour for. +* Links, rows and buttons fade between colours, and the line highlight fades + in, unless the reader asks for reduced motion. + +Changed +....... + +* On a narrow window the tabs stay on one row and scroll sideways with the + active tab in view, rather than wrapping a tab or two onto a second row. +* On a narrow screen each commit detail sits under its label, and a phone + leaves out the diffstat's file modes. The summary keeps its log counts on a + phone, so its rows still line up. +* List rows highlight under a mouse only, so on a touch screen the last row + tapped no longer stays highlighted. +* The logo is brighter in dark mode. +* The diffstat bars are drawn as SVG, so a strict Content Security Policy no + longer has to allow inline styles, and the diffstat box has room inside its + border. + +Fixed +..... + +* The summary's sections disagreed on how many columns its table had. With + the default config the log and clone rows stopped short of the table's edge, + on a phone the log rows did with any config, and the summary and refs pages + were invalid HTML. +* A commit's branch and tag labels were joined to the last word of its subject, + so a narrow cell broke the line before that word and stranded another. +* A download link and its signature could break across lines mid-name. +* The rule above the code on the blob and blame pages, and the line highlight, + ended at the longest line of a short file rather than at the page's edge. +* A commit that changes no files drew an empty diffstat frame. + + +v2.9.1 (2026-10-24) +------------------- + +A bugfix release for the tree and blame pages, whose line numbers had drifted +away from the code since v2.0.0 in Safari and in every browser on a typical +Linux desktop, until the code sat dozens of lines below its number at the end +of a long file. + +Added +..... + +* A character a browser would start a new line at, though git does not, is + shown as an escape sequence in span.escape on the tree and blame pages and + by the syntax highlighter: a carriage return with no line feed after it, a + vertical tab, a form feed, next line and the Unicode line and paragraph + separators. + +Changed +....... + +* Patches end with the cgit version again, written as git writes its own, so + this release signs them "cgit 2.9.1". The footer and the generator tag still + carry no version. + +Fixed +..... + +* The code beside the line numbers was set in the browser's own monospace + font, which made each of its lines a little taller than its number, by a + pixel in Safari and on Linux, so the two columns drifted apart down every + file. +* A lone carriage return started an extra line in every browser, and U+2028 + and U+2029 did in Safari, each pushing every later line below its number. +* The line highlight sat a pixel low, covered only the digits of each number, + and ended at the edge of the view on a file scrolled sideways. +* Code in a readme took the browser's own monospace font, Courier in Chrome + and Safari, rather than the theme's --font-mono. + + +v2.9.0 (2026-10-17) +------------------- + +A compatibility and hardening release. Lua 5.5 is supported, readmes render +closer to how GitHub shows them, the auth examples were overhauled, 32-bit +builds compile again, and two audits of the extensions and of the C code +closed what they found, from a cache lock that an exec filter let go of to +a log search that was never the literal match it claimed to be. + +Added +..... + +* Lua 5.5, detected when building and claimed by every extension, which + needs luaossl 20260910 or later there. +* Stable markup hooks for site themes: a data-page attribute, named sections + and a class per link kind. +* Readmes follow GitHub more closely: relative links lead into the tree at + the readme's own ref, lines of a paragraph run together, a table may cut a + paragraph short, a wrapped list item stays in its list, urls and addresses + in angle brackets link, backslash escapes and character references are + honoured, underscores inside words are left alone, and headings get the + anchors GitHub gives them. Images and badges are left out. +* The auth examples bind a session to the account's password hash, so a + changed password ends it, use a __Host- cookie where one can be set, turn + down passwords past 256 bytes unchecked, spend a missing account's login on + a real hash, load their libraries only when a request needs one, and say + which hash kinds each system's crypt checks. +* Avatars are looked up by SHA-256, offered at twice the size to dense + screens, marked decorative, and left out when luaossl is missing. +* The syntax highlighter finds a script's lexer from its shebang line. +* make get-git checks the Git tarball against the SHA-256 kernel.org lists. +* The dumb transport answers HEAD from the ref store and the index dates a + repository from its reftable, so reftable repositories clone and age. + +Changed +....... + +* enable-trailers is now enable-commit-trailers. +* The bundled Git is 2.56.0. +* The pages carry no version number, and the Lua-less build is checked by + the suite as well. +* Any path below the about page answers 404, the about filter is handed the + tree url its links need, and the about redirect keeps the query string. +* The dumb transport serves only what a clone asks for, a loose object, a + pack with its index and info/http-alternates, sends each file with its + size and keeps none of them in the cache. +* A page behind an auth filter is marked private, and every page that + follows a branch takes cache-dynamic-ttl. +* summary-branches, summary-tags and max-ref-count read a negative value as + no limit, and the feed refuses pathspec magic as the log does. +* patch, rawdiff and signature downloads hold to max-blob-size, and a + readme past it says so on the about page. +* Diffs no longer ask xdiff for a minimal result, which cost quadratic time + on a reordered file, and tar.xz snapshots are compressed on one thread. +* The cache slot lock is an flock, which outlasts an exec filter's swap of + stdout where the record lock did not. +* Git is built without translations or Tcl, the release script builds with + the compiler it probed, the two builds no longer share vendor/git at once, + sparse checks the sources as gnu17, and a musl build is documented. +* The example tracker links in link-commits.lua and link-trailers.lua ship + commented out, so an unedited copy links object names alone. +* The manual, README and sample cgitrc say what the code does: every page + and query parameter, every file make install puts in place, the defaults + and value syntax, and which filters get the repository variables. + +Fixed +..... + +* 32-bit builds, where Git 2.55's size_t object sizes no longer compiled. +* The log search matched as a regular expression after all, so a term with + a bracket in it answered a 500 and a crafted one took the memory of the + box. +* A pushed date or zone outside what git's date code accepts, and a notes + ref pointing at anything but a tree, ended the summary, refs, log, commit + and feed pages of the repository. +* A snapshot name led to a branch spelled like the tag's stem, members + of a snapshot named by its suffix alone started at a slash, and a missing + PATH refused every compressed snapshot. +* The plain view answered twice for duplicate tree entries and read a freed + mimetype on the way, a control byte in a file name made the web server + refuse the download, a scanned defbranch could name a path outside the + repository, and the error page resolved the very id it had refused. +* A fill whose last flush failed to write, on a full disk for one, left the + visitor a blank response, a cache ttl in the tens of millions of minutes + overflowed, and an empty list reached qsort as a null, which glibc's + sanitizer build aborted on. +* Links built from the repository url and the feed link's branch were not + encoded, a readme vanished behind an annotated tag, a followed log lost + its root commit and paged by the wrong name, a Lua build crashed when git + wrote before cgit's own setup, text was cut inside a multibyte character, + and the tag page offered snapshots of trees and blobs. +* An absolute symlink target was linked as a path inside the tree, a chain + of single directories ended in a dangling separator, a repository without + a path was dated from a file named "(null)", a NUL ended a config comment + early, and a tree row was left open when a link target could not be read. +* An empty repo.url is ignored, a readme ending in a colon is gated like a + path on disk, an error mid capture keeps its message, date-format= + local-local renders, an indented comment in the mimetype file is skipped, + types that only spell xml get no charset, the sendfile loop stops at a + short slot, slot keys and pages are read and written in full, and the + stats page stops after its error page. +* auth-file.lua refuses every repository when it cannot read its repos file, + cookie, readme and avatar parsing run in linear time, the cache hook keeps + its rm errors from pushers, the age hook leaves its directory writable to + the group, a Lua script may write while it loads, and every Lua filter + failure is named in the log. +* Git read the global config for its trace settings before cgit isolated + the environment, so every request probed $HOME/.gitconfig, which the + home-access test caught only once it ran on a real x86_64 kernel. +* make DEVELOPER=1 passes: string literals sit behind const pointers and + callbacks are passed by address. + + v2.8.0 (2026-09-16) ------------------- |
