AgeCommit message (Collapse)AuthorLines
Ask each page that sorts odd branches in one loopBryce Kwon-23/+8
Write the test filter scripts with write_scriptBryce Kwon-9/+3
Derive the API test's config from the loud oneBryce Kwon-6/+1
Check the filter flush on the pages already fetchedBryce Kwon-16/+7
The about check already finds the div right before the filtered text, so its copy went, and the tree page is flattened where it was first read.
Cut test comments that repeat what is said nearbyBryce Kwon-13/+4
Correct two test comments that went staleBryce Kwon-3/+3
Drop test lines that add nothingBryce Kwon-4/+0
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.
Leave two log checks to the log testsBryce Kwon-12/+0
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.
Leave the blob size refusals to the limits testsBryce Kwon-22/+5
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.
Look up a request's commit in one placeBryce Kwon-0/+10
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.
Reuse the ids t0109 has already looked upBryce Kwon-2/+0
Drop the patch greps the comparisons already makeBryce Kwon-20/+0
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.
Put the valgrind comment above the loop it explainsBryce Kwon-3/+3
Drop two setup.sh lines that change nothingBryce Kwon-5/+3
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.
Tighten the checks that match stray textBryce Kwon-8/+8
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.
Require a whole page when a filter exits earlyBryce Kwon-2/+3
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.
Make the main cgitrc filter check run the filterBryce Kwon-3/+6
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.
Let go of a slot lock that cannot take its keyBryce Kwon-0/+15
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.
Keep lock contention out of the error logBryce Kwon-2/+20
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.
Lock the cached repolist with flockBryce Kwon-0/+38
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-0/+27
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.
Tidy the cache test's helpers and outputsBryce Kwon-24/+18
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.
Use test_dir_is_empty for the empty cache checksBryce Kwon-16/+8
The library's check also lists whatever was left behind when it fails.
Write a session's expiry in whole secondsBryce Kwon-0/+11
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.
Drop an auth prerequisite no test asks forBryce Kwon-4/+2
Set the Lua prerequisite once for every testBryce Kwon-87/+27
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.
Move the highlighter fallback check into t0502Bryce Kwon-24/+12
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.
Share the request helpers in the auth checksBryce Kwon-77/+49
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.
Let an unmirrored sink fail the way Lua wouldBryce Kwon-12/+0
Drop the auth stubs no check reachesBryce Kwon-20/+6
Every check replaces get_secret, the only caller of posix.sys.stat, link and unlink, and nothing outside the harness calls preload.
Drop auth guards for input cgit never sendsBryce Kwon-3/+4
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.
Strip control characters from the location aloneBryce Kwon-2/+0
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.
Take a signed cookie apart with one matchBryce Kwon-0/+1
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.
Drop a highlighter check that tested the harnessBryce Kwon-6/+0
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.
Drop the highlighter's extension fallbackBryce Kwon-14/+5
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.
Drop a stray blank line from the about-render testsBryce Kwon-1/+0
Drop the readme hooks that nothing readsBryce Kwon-6/+5
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.
Trim a snapshot name without reading out of boundsBryce Kwon-0/+30
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.
Open the empty page's clone table on its first urlBryce Kwon-0/+29
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.
Tidy up after a directory chain however it endsBryce Kwon-0/+27
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.
Free the log's tip when its walk failsBryce Kwon-0/+19
Every exit now goes through one label, which also clears the walk arguments that the normal end used to leave allocated.
Refuse pathspec magic on the stats pageBryce Kwon-0/+9
Open the stats window at midnight on its first dayBryce Kwon-0/+28
Label the age column of a followed logBryce Kwon-0/+12
Scroll a line range to where a single line landsBryce Kwon-0/+8
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.
Stop skipping ages as they change unitBryce Kwon-0/+6
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.
Move scan-path below the settings it inheritsBryce Kwon-3/+14
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.
Keep the age hook quiet when it cannot writeBryce Kwon-0/+23
Declare each phony target beside its ruleBryce Kwon-4/+5
A list at the end of the file is easy to miss when a target is added or renamed.
Keep the commit-graph current in an example hookBryce Kwon-1/+23
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.