| Age | Commit message (Collapse) | Author | Lines |
|
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.
|
|
getpwuid leaves errno alone for a uid with no passwd entry, so a scan
logged "Unable to read the owner" with "Success" as the reason for each
repository such a uid owns.
|
|
|
|
release_revisions frees revs->mailmap, and the log page points it at the
static list cgit_mailmap returns, so every log of a repository with
enable-mailmap aborted. A walk whose setup failed holds commits that are
already freed, so releasing it could free them twice.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The log, refs and tag pages no longer open a filter of their own, so
they stop including filter.h.
|
|
|
|
|
|
The header's blob and pathspec checks move after the diff wrappers so
each group reads as one, and each static helper now sits directly above
its only user.
|
|
With the frees gone from shared.h, five page files need nothing else
from it, so they stop including it.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Git's pathspec item holds a const string now, so a path needs no
writable copy to be matched.
|
|
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
No caller reads the result, and a void html_include fits the Lua
binding's callback as it is, so the wrapper that dropped it goes too.
|
|
|
|
QSORT skips a list of fewer than two entries, so an empty list's null
base never reaches qsort, which is what cgit_qsort was written for.
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
Xdiff hands out_line a whole line each time, as the prefix, the record
and any no-newline marker, and the fragment was already flushed before
the call returned, so nothing ever carried over to the next call.
|
|
|