| Age | Commit message (Collapse) | Author | Lines |
|
|
|
|
|
The trash directory starts empty and setup.sh already made the cache, the
clamp check already fails on a short query, and the commit the setup
named is still there to pin.
|
|
t0103 already renders foo/log and finds commit 5, and its search for a
bracket fails the same way this literal search did if --fixed-strings
ever goes.
|
|
t0204 asks the tree, plain, blob and blame pages for one oversized blob
and checks the exact status and message, so the looser copy here went.
|
|
The diff page now names a revision that is no commit the way the
request wrote it, as the other pages already did, rather than as the
full id it resolved to. The helpers sit beside the error page in
ui-shared.c, since shared.c prints nothing.
|
|
|
|
The From, Date, Subject and signature lines are part of what the next
test compares in full against git format-patch, for the single commit
and for the range alike.
|
|
|
|
The library has read TEST_RESULTS_SAN_DIR for the last time by the
time it returns, and the trash directory it makes is empty, so there
is no cache to remove.
|
|
Every page holds foo in its footer element, the foo+bar row holds bar,
the branch switcher holds master, and commit 1 and file-1 also match
commits 10 to 19 and file-10 to file-19. A search page repeats its term
in the search box. So these checks passed on pages that lacked what
they look for, and each now matches the link itself.
|
|
When a filter cannot run, cgit dies mid-page with its Status line
already out, so the check passed with no filter at all. That is the
case wherever true lives only in /bin, as on busybox. true now comes
from the PATH, and the page has to reach its end.
|
|
The check asked for the summary page, which never runs an about filter,
so it passed with exec:/bin/true on macOS, which has no such file, and
with a filter that does not exist at all. Its first line read the
stderr the previous test left behind. execvp searches the PATH, so a
plain true runs the same on macOS, Debian and busybox.
|
|
A failed truncate or key write returned with the descriptor still open,
so the lock was held while the page rendered uncached and the file was
left behind. It is removed before its last close, as every holder does.
|
|
process_slot logged every failure to lock, so each request that found
its slot being filled left a line, while refresh_slot logged none, so an
expired slot in a directory the server cannot write was served stale for
good without a word. lock_slot now logs the step that failed, as the
scan does, and leaves out only another request at work.
|
|
The slot lock has to be an flock, since an exec filter drops a record
lock when it closes the stdout a fill writes through. The scan only got
by with fcntl because nothing reopens its file while it runs. One kind
of lock lets the two share their code, and on Linux, where the kinds
never see each other, an flock on the scan's file now holds a scan off
like any other.
|
|
Each exec filter and snapshot compressor a fill runs inherited the slot's
lock descriptor beside the stdout it writes into. An flock lasts until
its last copy closes and nothing waits for a process a filter leaves
behind, so a fill killed before its rename could leave the slot locked,
and served stale or uncached, for as long as such a process lived.
The scan holds its lock across no exec and opens the same way so that
the two stay alike.
|
|
The header's last sentence named two of the many later subjects, so it
goes too. The second request's stderr is still kept, for the lock tests
that come next.
|
|
The library's check also lists whatever was left behind when it fails.
|
|
On Lua 5.3 and later a length worked out with a fraction, such as
1.5 * 24 * 60 * 60, is a float, so the signed expiry came out as
1793609024.0, which validate_value refuses, and every login failed.
Max-Age took the same .0, which makes a browser ignore it.
|
|
|
|
setup.sh already asks the binary, so the seven scripts that each turned
the answer into a prerequisite now share one. test-lib names the
missing prerequisite beside every test it skips, so the notes that cgit
lacks Lua go, while the ones announcing a fallback stay. The list of
standalone interpreters moves into lib.sh and matches the versions the
extensions claim directly.
|
|
t0502 owns the shipped highlighter and already writes a cgitrc naming
it, so the check needs no config of its own there. t0204's header still
called it the last case long after it stopped being one.
|
|
The two identical posts for an unknown user become one, and no two
checks share a name, so a failure report points at a single check.
|
|
|
|
Every check replaces get_secret, the only caller of posix.sys.stat,
link and unlink, and nothing outside the harness calls preload.
|
|
cgit names no repository with an empty string, never nil, so the check
that the index stays up proved nothing, and auth-file in fact refuses
the index too while its repos file cannot be read. A session_seconds of
0 signs a session that has expired by the time it comes back, so it
needs no branch of its own in set_cookie.
|
|
set_cookie only ever writes an empty value or a token secure_value
built from url-encoded text, digits and hex, so stripping it changed
nothing.
|
|
The loop let a valid cookie through with a field appended, a doubled
separator or a zero in front of its expiry. The payload now carries the
expiry as written, so only the spelling secure_value issues verifies.
|
|
The filter hands a NUL through untouched, and only the harness's copy of
cgit's sink cut the text there, so the check would have failed the day
the filter replaced NULs the way about-render does.
|
|
The table of extensions and the second lookup served only a Scintillua
with no detect(), which now leaves every file uncoloured but escaped.
The fake detect() names a lexer after the file's suffix, so every test
lexer is reached through it.
|
|
|
|
Nothing in assets/ or in README's list of hooks reads a fenced block's
data-lang or the manpage class on a man page's wrapper, so the header
now names the two wrappers the stylesheet does style.
|
|
For a url of .git, or an empty one, repo_basename stepped its index to
the byte before its buffer, read it, and would have cleared it had it
held a slash. Git's strbuf trims take the same steps safely, and they
lift the 1024-byte cap that failed the page for a longer url.
|
|
The page guessed from the two settings cgit_add_clone_urls reads, so a
clone-url that expanded to nothing, or an empty one turning the global
off, still drew a Clone heading over no rows. The summary already waits
for a first url, and both now draw the heading the same way.
|
|
A row whose first entry is itself a directory leaked that entry's name.
A level git could not read as a tree returned early instead, which also
left the row's log, stats and plain links on the deeper path.
|
|
Every exit now goes through one label, which also clears the walk
arguments that the normal end used to leave allocated.
|
|
|
|
|
|
|
|
The anchors' scroll margin of half the window already centres a line
scrolled to the top of the view, which is where the browser puts a
single line. Asking to centre a range as well centred the margin with
it, and in Chromium, WebKit and Firefox the first line of a range
landed 73% of the way down the window against 49% for a single line.
|
|
getElementsByClassName returns a live collection, so an age moved to
the next unit dropped out of it mid-loop and the age after it was
skipped until the next pass, which can be a day away. On a cached page
that has crossed a unit boundary every second age stayed stale.
querySelectorAll returns a static list of the same elements.
|
|
The quick start says to uncomment scan-path, and in its old place a
scanned repository missed every setting below it, among them the
filters, the snapshots and the enable flags.
|
|
|
|
A list at the end of the file is easy to miss when a target is added
or renamed.
|
|
cgit's log, blame and graph pages read commits from the commit-graph
when a repository has one, and its changed path filters let a walk
limited to one file skip the commits that never touched it. git gc
writes a graph only now and then and starts those filters only when a
write asks for them, so the hook writes a split layer with them after
each push.
|
|
The hook cleared every slot on a push to any repository. cgit writes the
request a slot answers at its head, so the hook now reads it back and
drops only the pushed repository's pages and the index. It finds the
repository's url from scan-path or hooks.cgiturl, and with neither it
clears everything as before.
|
|
DocBook, pod2man and hand written pages leaked roff onto the page: font
escapes inside no fill blocks, comments, layout escapes such as \% and
\c, the colours and half line moves around DocBook's links, and the
requests and macro definitions their preambles open with. Those now
draw nothing, the common named characters and strings render, .EX and
pod2man's .Vb read as code, a .TP tag takes a line of its own and the
alternating font macros switch fonts between their arguments. Anything
rarer still falls back to its text.
|
|
A line of equals signs or dashes under a paragraph now makes a heading
of it, as on GitHub, instead of running into its text, and any other
rule ends the paragraph. Four spaces or a tab start a code block, and an
escaped pipe stays in its table cell. A link opening with two slashes
or backslashes in any mix leads to another site, so it renders as text
like the plain scheme relative one already did.
|
|
cgit takes filter output through a C string sink that stops at the
first NUL, so a readme holding one lost everything after it. Each NUL
now shows as U+FFFD, as a browser would show it.
|