| Age | Commit message (Collapse) | Author | Lines |
|
|
|
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.
|
|
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.
|
|
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.
|
|
|
|
The login posts outside any repository, so the log line names the
repository by the page its signed way back leads to.
|
|
Only HTTPS=on counts, the same test cgit makes before it writes an
https link of its own.
|
|
|
|
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.
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
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.
|
|
|
|
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.
|
|
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.
|
|
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.
|
|
|
|
|
|
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
"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.
|
|
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.
|
|
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.
|
|
|
|
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.
|
|
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.
|
|
|
|
|
|
|
|
It asks for a log page, and the index never carries a feed link.
|
|
|
|
|
|
|
|
|
|
The one-line request wrappers go with them. Configs with several
repositories, a key out of place on purpose, the cache on or no
repository of their own stay written out.
|
|
The helpers are named by kind. cgitrc_repo and cgitrc_copy write the
config file named first, and cgit_url, cgit_query and cgit_rc run cgit,
each named after what it is handed first. A repository copies its
defaults from the globals read before its repo.url, so cgitrc_repo
places every setting itself, and a global can no longer land where it
silently stops applying. The t00xx and t01xx files move to them here.
|
|
|
|
The download row was already matched on the same tag page, no fold can
sit between the message and the signature the check requires, and the
submodule row is the one the test before extracted.
|
|
bar's copies read the same page code as foo's, and the clone url row
test that follows matches bar's url in full.
|
|
t0104 checks the same span, and what it holds, on the tree and blame
pages, and t0502 checks it on a highlighted page.
|
|
t0004 reads only the documents, and t0005 builds its own repository
and configs, so each run of either built five repositories for none.
|