AgeCommit message (Collapse)AuthorLines
Lock the cached repolist with flockBryce Kwon-9/+4
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.
Open the lock files close-on-execBryce Kwon-1/+1
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.
Use the parser's INT_MAX for every snapshot formatBryce Kwon-5/+1
The snapshots parser already answers all with INT_MAX, so cgit.c needed no value of its own for the same mask.
Hand back the fallback branch rather than a copyBryce Kwon-13/+4
Drop dead checks and a repeated filter cleanupBryce Kwon-12/+7
build_snapshot_setting always returns a buffer, both commit-sort values are tested on their own, authenticate_post ends the process, and the filters are cleaned up by the atexit handler once cmd_main returns.
Cap the search with xstrndup aloneBryce Kwon-4/+1
Rename prepare_repo_env to open_repoBryce Kwon-2/+2
It opens the repository and loads its notes, while cgit_prepare_repo_env exports the CGIT_REPO_ variables, and the two names were one prefix apart.
Explain the notes setup in one commentBryce Kwon-4/+3
Let scan_tree choose the project list itselfBryce Kwon-12/+3
Three callers wrote out the same choice, and the header already says a scan visits only the listed paths when a project list is set.
Drop the command line switches the query coversBryce Kwon-11/+0
--repo= only stored the name, so it never selected a repository, and --query= already reaches what the other four set, with the offset clamped the way a request's is.
Drop the defaults the memset already setsBryce Kwon-17/+0
prepare_context zeroes the whole context first, and the repository list is a global, so neither needs its zeros written out again.
Mark the static pages in the command tableBryce Kwon-28/+2
The table already records what each page needs, and a second list of page names in cgit.c had to be kept in step with it by hand.
Set the virtual root from SCRIPT_NAME up frontBryce Kwon-6/+5
The script name always holds a value, so the fallback after parsing fired whenever cgitrc left virtual-root unset. The root is now set with the other defaults, for cgitrc to replace. A die while cgitrc is read is the one change, and its page now links the root with the trailing slash every other page has. The environment's copy of the script name only fed this.
Offer the versions as an optionBryce Kwon-0/+2
enable-version-info brings back the cgit and git versions that 3a00e19 took off the footer and the generator tag, for a site that wants them, and the version 2a6726a put on the signature of patches now follows it too. It stays off by default for the reason 3a00e19 gave.
Name the page first in every titleBryce Kwon-1/+1
Summary, about, log, refs, tag and stats pages shared one title, so tabs, history and search results could not tell them apart. Titles now read page, repository and site, with root-title as the site, and the description stays in the meta description, where search engines read it.
Sign patches with the cgit versionBryce Kwon-0/+2
git format-patch ends each patch with the version of git that wrote it, and the bare "cgit" that 3a00e19 left in its place said less. The version is written as git writes its own, without the v of the tag, so a release build signs with "cgit 2.9.0". The footer and the generator tag still leave versions out.
Isolate git from HOME before git's own setupBryce Kwon-3/+5
Git reads the global config for its trace settings before cmd_main is reached, so the isolation there came too late and every request probed $HOME/.gitconfig. The home-access test had passed on arm64 only because access is no syscall of its own there, so it now traces every call that takes a path.
Sort an empty list without handing qsort a nullBryce Kwon-1/+1
Every list sorted here is null until its first entry, and C leaves a null base undefined even with nothing to sort. glibc declares it nonnull and its UBSan build aborted the stats page of a repository with no commits in the window, which the Linux matrix caught.
Pass over a notes ref that names no treeBryce Kwon-3/+14
A pusher can point refs/notes/commits or a signature notes ref at any object, and git dies loading one that is no tree, which ended every page of the repository, the dumb transport included. Such a ref now counts as absent.
Keep string literals behind const pointersBryce Kwon-1/+1
Git's DEVELOPER=1 build turns on -Wwrite-strings as an error, and the literals stored through plain char pointers failed cgit's own objects there. The exec filter's argv takes the cast execvp needs once, the way git's run-command does.
Remove what the version removal left behindBryce Kwon-2/+0
Cache every branch page under cache-dynamic-ttlBryce Kwon-7/+2
The dynamic ttl only applied when the url named a branch with h=, so the log, tree and refs of the default branch, which never carry one, fell back to cache-summary-ttl. The manual already gives each ttl the scope the code now uses.
Gate a readme ending in a colon like a disk pathBryce Kwon-4/+2
trust-scan-config passed any readme holding a colon as a tracked file, while the parser takes one only when a path follows the colon, so a scanned repository could still name a file on disk outside itself. The two now share one test.
End a request quietly when the client has goneBryce Kwon-1/+3
A write that failed with EPIPE on an uncached page died into an error page, which died again at exit when the page could not be sent either, and git logged a recursion warning on every dropped connection. A filter that exits early fails a write the same way, so the quiet exit is kept for writes that reach the client itself.
Keep clone files and oversized responses out of the cacheBryce Kwon-1/+19
The dumb transport reads files that already sit on the disk, so a pack copied into a slot cost that disk twice and the request a second write of every byte. A snapshot took a slot whatever its size, so a visitor naming distinct refs and ids could fill the cache root with archives. `cache-max-slot-size`, 64 MB unless set, now serves a larger response from the lock file and drops it, along with any expired copy it would have replaced.
Rename enable-trailers to enable-commit-trailersBryce Kwon-5/+5
Align with spaces instead of tabsBryce Kwon-13/+12
Harden the request path, scan and error recoveryBryce Kwon-52/+125
Answer 404 for a repository whose path is missingBryce Kwon-6/+8
Gate scanned filters with `trust-scan-filters`Bryce Kwon-22/+13
Apply the mailmap at HEAD to every identBryce Kwon-0/+6
Split trailers out of the commit messageBryce Kwon-2/+14
Clean up the whole treeBryce Kwon-56/+47
Trim the comments and dead code across the treeBryce Kwon-54/+37
Report ignored config keys on stderrBryce Kwon-4/+12
Rename the inconsistent config keysBryce Kwon-23/+25
noplainemail enable-plain-email noheader enable-header cache-root-ttl cache-index-ttl cache-repo-ttl cache-summary-ttl cache-scanrc-ttl cache-scan-ttl agefile age-file renamelimit rename-limit extra-head-content head-content
Fold `enable-stats` back into `max-stats`Bryce Kwon-6/+0
A `max-stats` period enables the page again, as it did before v2.2.0, so one key does both jobs.
Use standard HTTP reason phrasesBryce Kwon-5/+5
Resolve submodule links from `.gitmodules`Bryce Kwon-0/+5
Log scan lock failures that are not contentionBryce Kwon-1/+6
Give up a scan or slot whose lock file was renamedBryce Kwon-0/+13
Let a crashed scan's lock expire with its processBryce Kwon-9/+40
Cache id-pinned pages and snapshots as staticBryce Kwon-3/+27
Keep error pages out of the cacheBryce Kwon-3/+2
Drop the Last-Modified, Expires and ETag headersBryce Kwon-11/+0
Remove the repository homepage featureBryce Kwon-4/+0
Restyle the sources and fix the audit's findingsBryce Kwon-843/+918
Bound the search and cache key a request can askBryce Kwon-1/+8
Gather page output into one bufferBryce Kwon-0/+3
Settle the names, types and layout of the sourcesBryce Kwon-59/+59