| Age | Commit message (Collapse) | Author | Lines |
|
The hook exists to feed the idle column, but nothing had cgit read an
age file, so a hook writing a date cgit cannot parse, or one at a path
cgit no longer reads, passed.
|
|
The header said a file the pusher cannot write stays as it was, but the
hook replaces it through mv, which needs only the directory, and with
stdin not a terminal mv does so without asking. That is the useful
behaviour, so the header now says so, and a test holds the hook to it.
Only a directory the pusher cannot write keeps the old file, which was
the one case tested.
|
|
A repository with no branches is meant to keep the date cgit already
had, and the hook writes through a temporary file that must not be
left beside the real one. Neither was checked.
|
|
No hook ran under a restrictive umask, so dropping the forced umask 022
passed, and the age file and the graph would then be unreadable to the
web server. Git alone writes the graph as -r-------- under umask 077.
core.sharedRepository was only tried as group, so the case folding and
the numeric modes went unchecked.
|
|
The cache hook's named url, no url and no access cases, the age hook's
missing directory and shared group, and the first commit-graph write
ran under sh alone, though the comment said every shell. The runs that
did loop over the shells ignored what the hook printed, which reaches
the pusher, so a hook that wrote to stderr or broke on a bashism under
dash alone could pass.
|
|
The checks that pages went had nothing proving they were there to begin
with, so they would pass with nothing removed if the scan list stopped
being written or two keys shared a slot. Nor did anything check that
the copy of the hook was pointed at the trash directory, and a renamed
line would have left it wiping the system's cache wherever the test
user can write it.
cached_requests read the lock and the scan list as if they were pages
and hid a failing dd. The test without access could not fail, since
nothing can be removed there and the scan list alone names a.git, so
it now compares the slots with the pristine copy.
|
|
The age fixture had one branch whose author and committer dates were
the same, and its only tag was lightweight on that commit. Sorting
oldest first, writing the author date or reading every ref rather than
the branches all passed, and the expected date came from the same
for-each-ref the hook runs. The dates now disagree on every one of
those points and the hook's answer is held to a literal date, under
every shell.
|
|
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.
|
|
|
|
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.
|
|
The hook forced a 022 umask, so in a repository shared with a group the
first pusher owned info/web and every other member's push failed to
write the age file there.
|
|
Only the exit status was hidden, so a pusher without write access to
the cache root saw a permission error per cached page, against what
the hook's own comment promised.
|